【发布时间】:2018-03-16 21:38:56
【问题描述】:
我在 Chrome 中验证 CORS 请求时遇到问题。
我有在 localhost 上运行的单页应用程序和在 Azure 中运行的 Web 服务。我使用 OpenIdConnect 登录。
当我像这样在 EDGE 中向后端发出 CORS 请求时,身份验证有效:
$.ajax({
type: 'get',
url: buildBackendUrl("api/Account"),
xhrFields: { withCredentials: true }
});
但是在 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-oidc - 重定向回:
localhost:46563/ - 由 Localhost 制作的 CORS:
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
【问题讨论】:
-
用那些简短的 sn-ps 来判断是不可能的......我想你首先检查了这些 cookie 是否在 Chrome 中设置开始?
-
所以为了清楚起见,这是关于为
localhost域设置的 cookie,您希望它被发送 - 确切的时间,发送到哪里? -
我已检查 chrome 设置中是否允许 chrome 3rd 方 cookie。我希望我将
.AspNetCore.Cookies=...与从本地主机发出的请求一起发送到myapp.azurewebsites.net/api/Account。但是我不能 100% 确定这些 cookie 是从哪里来的。我猜是由 myapp.azurewebsites.net/signin-oidc 生成并设置为 localhost -
好吧,至多最后一个 cookie 应该被发送到
myapp.azurewebsites.net/signin-oidc,因为其他两个对于该路径甚至都无效。当你在整个事情之后检查为myapp.azurewebsites.net设置的cookie时,它们都在那里吗?如果浏览器不接受它们,它也不能将它们发回。 -
“我猜是由 myapp.azurewebsites.net/signin-oidc 生成并设置为 localhost” -
myapp.azurewebsites.net无法为localhost设置 cookie .. . 将是一个巨大的安全问题,如果有可能的话。
标签: javascript google-chrome authentication cookies cross-domain