Sco*_*ell 2 cookies asp.net-mvc owin openid-connect auth0
我正在尝试让 OpenID Connect 身份验证适用于我的旧版 ASP.NET MVC 应用程序。我的 ASP.NET MVC 应用程序将作为中继方,我们的业务合作伙伴将作为身份提供者。
为了熟悉我需要做什么,我在 Auth0 上创建了一个帐户,并为 Web 应用程序创建了一个新的应用程序。然后我从 GitHub 下载了他们的 ASP.NET MVC OWIN 快速入门。我已完成所有设置,并且能够使用 Microsoft Edge 和 Firefox成功进行身份验证。但对于 Chrome,工作流程是这样的:
/authorize端点/callback向localhost:3000 上的端点发出 POST 请求检查 HTTP 流量,我发现Chrome 的问题在于步骤 (3) 中 - 当服务器在 302 重定向中设置 Nonce cookie 时 - Chrome 没有保存它。因此,当步骤(5)发生时,浏览器不会向服务器发送任何Nonce信息,验证失败。
步骤 (3) 和 (5) 中的 HTTP 流量证明了这一点。这是步骤 (3) 中的本地主机响应。您可以看到它告诉浏览器存储 Nonce cookie:
HTTP/1.1 302 Found
Cache-Control: private
Location: https://whatever.us.auth0.com/authorize?client_id=gYb3FOL5OWK419L8...
Set-Cookie: OpenIdConnect.nonce.fRunx5CPoGdhTRM3mgqpn62m9SFkH4AszKWpOOk8LV0%3D=T1NPQjNlYTgtQ...; path=/; expires=Sat, 18-Jul-2020 20:47:59 GMT; HttpOnly; SameSite=None
Run Code Online (Sandbox Code Playgroud)
但是在我重定向到 Auth0 后,我可以检查 Chrome 的 cookie,并且它的 localhost cookie 集合中没有 Nonce cookie。此外,当执行步骤 (5) 时,浏览器请求看起来像这样 - 没有提及 Nonce cookie:
POST http://localhost:3000/callback HTTP/1.1
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36
code=DANVniZ296OzQW...
Run Code Online (Sandbox Code Playgroud)
这会导致上述错误。
(当我使用 Edge 或 Firefox 检查 HTTP 流量时,在步骤 (5) 中,我看到浏览器发送了 Nonce cookie,而 Chrome 完全丢失了它。)
我使用的是 Chrome 版本 84 和 Windows 10。我还在家里的一台装有 Windows 7(和 Chrome 84)的旧电脑上尝试过此操作,并经历了完全相同的行为。
这里发生了什么,更重要的是,我如何让它工作?我最初的假设是,这可能是 SameSite cookie 问题,但我不认为是这种情况,因为我可以看到 cookie 一开始就没有创建(并不是说它存在,而是不存在)通过重定向发送到本地主机)。而且,Nonce cookie 有SameSite=None,所以这应该不重要,对吧?
谢谢
在同事的帮助下解决了...
SameSite=None如果流量通过 HTTP,Chrome 在使用时不会保存 cookie 。需要设置 Visual Studio 以使用 HTTPS。一旦我这样做了,事情就按预期进行了。
| 归档时间: |
|
| 查看次数: |
6164 次 |
| 最近记录: |