xhr.withCredentials = true;在Chrome中不起作用
问题描述:
我在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吗?
编辑:这里有要求的提琴手逮住:
- 重定向当我按下登录:
myapp.azurewebsites.net/api/Account/login?returnUrl=http://localhost:46563/
- 由于我已经登录没有必要去到登录页面。重定向
myapp.azurewebsites.net/signin-oidc
- 重定向回:从本地主机制造
localhost:46563/
- 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
答
即使世界上的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(...)
而不可能告诉那些简短片段......我想你首先托运这些Cookie是否设在Chrome浏览器开始? – CBroe
所以要清楚的是,这是关于为'localhost'域设置的Cookie,并且您期望发送 - 何时准确地到达哪里? – CBroe
我检查过在铬设置中允许使用第三方Cookie。我希望我发送的'.AspNetCore.Cookies = ...'与本地主机的请求到'myapp.azurewebsites.net/api/Account'。不过,我不能100%确定这些cookies来自哪里。我想这些是由myapp.azurewebsites生成的。net/signin-oidc并设置为本地主机 – Liero