2017-10-05 406 views
0

我在Chrome中驗證CORS請求時遇到問題。xhr.withCredentials = true;在Chrome中不起作用

我已經在Azure中運行的localhost和webservices上運行單個頁面應用程序。我使用OpenIdConnect登錄。

當我在EDGE CORS請求我的後端這樣的,認證工作:

$.ajax({ 
    type: 'get', 
    url: buildBackendUrl("api/Account"), 
    xhrFields: { withCredentials: true } 
}); 

但同樣也不在Chrome工作。當我手動輸入webservice url到瀏覽器時,請求被認證。

我檢查請求頭的CORS請求,所不同的是在餅乾:

  • 邊緣:ARRAfinity=...; AspNetCore.Cookies=...
  • 鉻:ARRAfinity=...

爲什麼Chrome不包括所有Cookie嗎?

編輯:這裏有要求的提琴手逮住:

  1. 重定向當我按下登錄:
    myapp.azurewebsites.net/api/Account/login?returnUrl=http://localhost:46563/
  2. 由於我已經登錄沒有必要去到登錄頁面。重定向
    myapp.azurewebsites.net/signin-oidc
  3. 重定向回:從本地主機制造localhost:46563/
  4. CORS: myapp-dev.azurewebsites.net/api/Account

在既,要求NR 3或4我沒有看到餅乾。

無論如何,請求NR 2(myapp.azurewebsites.net/signin-oidc)的響應試圖套餅乾:

HTTP/1.1 302 Found 
Cache-Control: no-cache 
Pragma: no-cache 
Content-Length: 0 
Expires: -1 
Location: http://localhost:46563/ 
Set-Cookie: .AspNetCore.Correlation.OpenIdConnect.3ifhkwCQkMuZkTgBxYiKMOSoLgTX2nIex-8aH-syh5Q=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/signin-oidc; samesite=lax 
Set-Cookie: .AspNetCore.OpenIdConnect.Nonce.CfDJ8FG-d2csck1FsQu2pwqnsxLd4w9YWobqchk1w3xMgy7bCX_KilCuRxuj4U0bSTAL-dD_iwdEaZI6pclqlP-3f7QBuKUMS379DFiBPd_tkEkyB_IYVWzJsR1xtw-_qcS1pQL6ial_C2ywbSwRucBxUqtDPMcuFEIomNDDnklpqWUmS_5Xb_tB23Ew7b14M861pL1CtJ18uPqgu-nOgn1RygqhBhMECoQfQ7YhXN_BtfiIbdPfw00jWNfMVc5G1B-SnT_eq80_RmxQ4_JOX3ZJfiI=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/signin-oidc; samesite=lax 
Set-Cookie: .AspNetCore.Cookies=...; path=/; samesite=lax; httponly 
+0

而不可能告訴那些簡短片段......我想你首先託運這些Cookie是否設在Chrome瀏覽器開始? – CBroe

+0

所以要清楚的是,這是關於爲'localhost'域設置的Cookie,並且您期望發送 - 何時準確地到達哪裏? – CBroe

+0

我檢查過在鉻設置中允許使用第三方Cookie。我希望我發送的'.AspNetCore.Cookies = ...'與本地主機的請求到'myapp.azurewebsites.net/api/Account'。不過,我不能100%確定這些cookies來自哪裏。我想這些是由myapp.azurewebsites生成的。net/signin-oidc並設置爲本地主機 – Liero

回答

0

即使世界上的cookie政策新草案,呼籲SameSite,目前Chrome和Opera實現。

基本上,如果您設置了xhr.withCredentials = true,那麼標記爲SameSite = Strict的Cookie不會與CORS請求事件一起發送;

爲了使其工作,您必須禁用特定cookie的SameSite策略。在ASP.NET 2.0的核心餅乾authetication的情況下,它是:

services.AddAuthentication(...) 
    .AddCookie(option => option.Cookie.SameSite = SameSiteMode.None) 
    .AddOpenIdConnect(...) 
相關問題