提问人:PierreSimonDeLaplace 提问时间:6/26/2023 更新时间:7/3/2023 访问量:97
在 OAuth2 协议中,在授权服务器重定向到“redirect_uri”后,浏览器不包含“ASP.NET_SessionId”cookie
In OAuth2 protocol browser does not include `ASP.NET_SessionId` cookie after authorization server redirects to the `redirect_uri`
问:
我有一个我不知道如何解决的问题。
我想使用 OAuth2 和 Microsoft 的授权服务器来获取具有一组用户权限的访问令牌,该令牌可用于通过 Microsoft Graph 从 OneDrive 应用中检索信息
我被堆叠在从授权服务器获取的阶段,然后应该执行对 ASP.NET 后端端点的调用。code
secured
code
从简单的按钮中,我Microsoft OAuth 端点 () 与我的安全 ASP.NET 端点。是和是.在所有 OAuth 舞蹈之后,我接到来自 Microsoft 域的呼叫(原点是 ),带有 、 和 。调用前面在 中指定的后端端点。GET
login.microsoftonline.com/common/oauth2/v2.0/authorize
redirect_uri
response_type
code id_token
respones_mode
form_post
POST
login.live.com
id_token
code
state
redirect_uri
关键是我有一个活动会话(用户已经登录),我需要一个浏览器来将 cookie 包含在请求中。在这种情况下,cookie 的属性设置为ASP.NET_SessionId
SameSite
Lax
如果我将 cookie 属性设置为可以访问端点。否则,浏览器会阻止潜在的 CSRF 攻击并且不包含令牌,只能访问具有属性的端点,这在我的场景中是不可接受的。SameSite
None
[AllowAnonymous]
让我想到的是,最后一次调用是,在其他使用 OAuth2 的网站的情况下,它通常是 .我不确定这是否是正确的轨道。Initiator
oauth20_authorize.srf
document
提前感谢大家,希望有人可能知道发生了什么,或者可能有一个安全的解决方法。
答:
使事情正常运转的最直接方法是摆脱 .响应模式使用 POST 方法重定向用户,因此使用该属性它无法工作。浏览器不会附加 cookie,因为浏览器以这种方式工作。response_mode = form_post
SameSite=Lax
正如Mozilla文档所述:
使用 Strict,浏览器仅发送来自 cookie 源站点的请求的 cookie。Lax 与此类似,不同之处在于,当用户导航到 cookie 的源站点时,浏览器也会发送 cookie(即使用户来自不同的站点)。
如果设置为响应方法将起作用。当然,由于安全漏洞(CRFS攻击),这种解决方案远非完美。SameSite
None
form_post
我决定更改为 ,拒绝 POST 方法并改用 GET。谈到安全性,最好留在 POST,但我还没有找到其他方法。该解决方案的缺点是,将交换令牌的代码将存储在日志、浏览器等中。为了使其更安全,我实现了 PKCE(代码证明密钥)并将有效期设置为 60 秒。response_mode
query
code
评论