我在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?
编辑:这里是由提琴手 grab 的请求:
按下登录时
-
REDIRECT:
myapp.azurewebsites.net/api/Account/login?returnUrl=http://localhost:46563/
-
由于我已经登录,因此无需登录页面 . 重定向
myapp.azurewebsites.net/signin-oidc
-
REDIRECT BACK:
localhost:46563/
-
CORS由Localhost制作:
myapp-dev.azurewebsites.net/api/Account
在两者中,请求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 回答
关于cookie政策的新草案,名为 SameSite ,目前由Chrome和Opera实施 .
基本上,如果设置
xhr.withCredentials = true
,则不会使用CORS请求事件发送标有SameSite = Strict的cookie .为了使其工作,您必须在特定cookie上禁用SameSite策略 . 在ASP.NET Core 2.0认证cookie的情况下,它是: