xhr.withCredentials = true;在Chrome

时间:2017-10-05 09:54:00

标签: javascript google-chrome authentication cookies cors

我在Chrome中验证CORS请求时遇到问题。

我在Azure上运行的localhost和webservices上运行的单页应用程序。我使用OpenIdConnect登录。

当我在EDGE中向我的后端执行CORS请求时,身份验证有效:

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

但是在Chrome中同样不起作用。当我手动输入webservice url到浏览器时,请求被验证。

我已经检查了CORS请求的请求标头,区别在于Cookie:

  • 边缘:ARRAfinity=...; AspNetCore.Cookies=...
  • Chrome:ARRAfinity=...

为什么Chrome不包含所有Cookie?

编辑:这是fiddler提出的请求:

  1. 按下登录时重定向:
    myapp.azurewebsites.net/api/Account/login?returnUrl=http://localhost:46563/
  2. 由于我已经登录,因此无需登录页面。重定向
    myapp.azurewebsites.net/signin-oidc
  3. REDIRECT BACK:localhost:46563/
  4. 由Localhost制作的CORS: myapp-dev.azurewebsites.net/api/Account
  5. 两者都没有,请求nr3或4我看不到cookie。

    无论如何,请求nr2(myapp.azurewebsites.net/signin-oidc)的响应尝试设置cookie:

    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
    

1 个答案:

答案 0 :(得分:2)

关于Cookie政策的新草案,名为 SameSite ,目前由Chrome和Opera实施。

基本上,如果设置xhr.withCredentials = true;

,则不会使用CORS请求事件发送标有SameSite = Strict的Cookie

为了使其工作,您必须在特定cookie上禁用SameSite策略。对于ASP.NET Core 2.0认证cookie,它是:

services.AddAuthentication(...)
    .AddCookie(option => option.Cookie.SameSite = SameSiteMode.None)
    .AddOpenIdConnect(...)