如果第三方 cookie 被阻止,则使用 oidc-client 跨域进行静默续订

Posted

技术标签:

【中文标题】如果第三方 cookie 被阻止,则使用 oidc-client 跨域进行静默续订【英文标题】:Silent Renew with oidc-client cross domain, if third party cookies are blocked 【发布时间】:2019-12-22 16:38:07 【问题描述】:

我们有两个 SPA 应用程序,它们与同一个 IdentityProvider 交互。 我们实现了 oidc-client 并且 SSO 运行良好。现在我们认识到,如果第三方 cookie 被阻止,静默身份验证将不起作用,这是一个大问题。

Safari、Firefox 等浏览器已经默认阻止第三方 cookie。在 SPA 应用程序中执行 Session_Management 和 Access_Token 管理的推荐方法是什么。

我们不希望用户再次登录,如果 IdentityProvider 上的 Session 仍然处于活动状态(会话处于活动状态 14 天,并有滑动到期)。

我有什么选择?

【问题讨论】:

您能否确认问题在于您的身份服务器的身份验证 cookie 未在静默登录方案中发送? 如果您使用“静默刷新”又名 refresh_token 来获取新的 access_token,则 IDP 上的 Cookie 不会发挥任何作用。 @VidmantasBlazevicius 您不在 SPA 中使用刷新令牌 - 它是 iframe 中的 prompt=none 授权端点请求,因此需要身份验证 cookie。 是的,我应该更仔细地阅读这篇文章。我认为这有点打破了隐式流的静默身份验证意味着诚实。我可以看到尝试确定第三方 cookie 是否已启用/禁用,并至少提示用户让他知道后果可能是一种合理的方法...... @mackie 我可以确认。我认为在前面的频道中没有办法处理这个问题。我们现在尝试以下方法:leastprivilege.com/2019/01/18/… 【参考方案1】:

基于 OP 上的 cmets 并进行了一些实验...如果我将身份验证 cookie 设置为 SameSite=Lax,则基于 iframe 的静默调用不起作用,但***重定向不受影响。因此 SameSite=Lax 破坏了 OIDC,因此如果您希望使用标准客户端模式,则需要有一个全面的 CSRF 解决方案。

【讨论】:

以上是关于如果第三方 cookie 被阻止,则使用 oidc-client 跨域进行静默续订的主要内容,如果未能解决你的问题,请参考以下文章

如何在不刷新页面的情况下检测第三方 cookie 被阻止; [?]

手机浏览器如何防止被检测到设备信息

如何允许在阻止第三方 cookie 的浏览器上对 web 应用程序进行身份验证?

当浏览器默认禁用第三方cookie

Vuepress oidc-client 阻止构建

无法识别角色授权 - 带有 IdentityServer4 Cookie/Oidc 身份验证的 ASPNET CORE 5