Lie*_*ero 3 javascript authentication cookies google-chrome cross-domain
我在 Chrome 中验证 CORS 请求时遇到问题。
我在 localhost 上运行单页应用程序,在 Azure 中运行 Web 服务。我使用 OpenIdConnect 登录。
当我像这样在 EDGE 中向后端发出 CORS 请求时,身份验证有效:
$.ajax({
type: 'get',
url: buildBackendUrl("api/Account"),
xhrFields: { withCredentials: true }
});
Run Code Online (Sandbox Code Playgroud)
但同样的方法在 Chrome 中不起作用。当我手动在浏览器中输入 Web 服务 url 时,请求已通过身份验证。
我检查了 CORS 请求的请求标头,差异在于 cookie:
ARRAfinity=...; AspNetCore.Cookies=...ARRAfinity=...为什么 Chrome 不包含所有 cookie?
编辑:这里是提琴手捕获的请求:
myapp.azurewebsites.net/api/Account/login?returnUrl=http://localhost:46563/myapp.azurewebsites.net/signin-oidclocalhost:46563/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
Run Code Online (Sandbox Code Playgroud)
关于 cookie 政策的新草案称为SameSite,目前由 Chrome 和 Opera 实施。
基本上,如果您设置了,则标有 SameSite=Strict 的 cookie 不会随 CORS 请求事件一起发送xhr.withCredentials = true;
为了使其工作,您必须禁用特定 cookie 上的 SameSite 策略。对于 ASP.NET Core 2.0 身份验证 cookie,它是:
services.AddAuthentication(...)
.AddCookie(option => option.Cookie.SameSite = SameSiteMode.None)
.AddOpenIdConnect(...)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6567 次 |
| 最近记录: |