Azure AD 前端通道注销 URL 和 ASP.NET 中的 SameSite cookie

问题描述 投票:0回答:1

我一直在研究为旧的 Web 表单 ASP.NET 应用程序实施 Azure AD,并在尝试通过应用程序注册中的前端通道注销 URL 使用单点注销时遇到了问题。

默认情况下,由于 Azure AD 在 iframe 中加载请求的方式,这不起作用,这不允许在注销请求中发送 cookie,因此该请求会触发,但不会有用户关联,因为身份验证饼干不存在。

我看到一篇文章描述了这种情况: https://joonasw.net/view/aad-single-sign-out-in-asp-net-core

这里描述了需要将身份验证 cookie 上的 SameSite 属性设置为 None ,以便将其包含在注销请求中,这实际上有效,它能够注销发出请求的用户并从我的应用程序中清除他们的 cookie从另一个 Azure AD 应用程序注销时:

 app.UseCookieAuthentication(new CookieAuthenticationOptions()
        { CookieSameSite = Microsoft.Owin.SameSiteMode.None });

我的问题是,此修复似乎有些不对劲,这是否不会通过允许在任何请求中发送身份验证 cookie 来引发 CSFR 攻击?是否有其他解决方案或任何方法来保持 SameSite 严格但以某种方式允许 login.microsoftonline.com 发送应用程序的身份验证 cookie?

asp.net azure-active-directory webforms openid-connect owin
1个回答
0
投票

这里需要考虑两种类型的 cookie:

第三方 Cookie

Azure AD 等身份系统颁发的 Cookie 使用

SameSite=None
。当 Web 应用程序执行 OAuth 登录操作时,这允许在浏览器 URL 中的顶级重定向
when the user can view the identity domain
中发送此类 cookie。这适用于所有浏览器。

如果此类 cookie 是从 iframe 或 Ajax 请求发送的,则由于 RFC6265bis 中引入的限制,它们可能会被丢弃,其中引入了相同站点 cookie 限制。这是一项保护用户隐私并防止不受欢迎的跟踪的举措。有些浏览器超出了规范。 Safari 就是一个例子,如果此类 cookie 在 iframe 或 Ajax 请求中发送,其默认设置将删除此类 cookie。

因此,一些旧的流程,例如会话管理和前端通道单点注销不再真正可行,因为它们在 iframe 中使用 cookie 并且不会通知用户。您无法在代码中执行任何操作来使此类流程在所有浏览器中运行。

第一方饼干

同时,Web 应用程序自己的 cookie 应使用最强的 SameSite 设置,以最好的方式防止跨站点请求伪造。因此,在 ASP.NET 应用程序中更喜欢此设置:

app.UseCookieAuthentication(new CookieAuthenticationOptions()
        { CookieSameSite = Microsoft.Owin.SameSiteMode.Strict });
© www.soinside.com 2019 - 2024. All rights reserved.