gpt4 book ai didi

oauth-2.0 - SPA 中的 OIDC session 管理(单点登录)

转载 作者:行者123 更新时间:2023-12-02 22:47:53 26 4
gpt4 key购买 nike

我目前正在使用 OIDC 在多个应用程序上实现 SSO。我不确定如何在单页应用程序 (SPA) 中处理单点注销以进行基于 token 的身份验证。

考虑两个应用程序。应用程序 A 是使用 OAuth2 授权代码流程的标准 Spring MVC 应用程序,应用程序 B 是使用隐式流程的 SPA。如果用户已登录应用程序 A,则当他们导航到应用程序 B 时,他们会通过 SSO 自动登录,这是预期的。但是,如果用户注销应用程序 A,然后导航到应用程序 B,则当前应用程序 B 仍会加载并允许访问 api,因为它具有存储在浏览器本地存储中的有效 OAuth2 访问 token 。我希望应用程序 B 要求用户在发出任何其他请求之前重新进行身份验证。

由于无法让身份提供者向服务器端点发送“注销”请求,因此建议在 SPA 中执行单点注销的方法是什么?

我想到的几个可能的解决方案是:

  1. 创建一次性访问 token ,每个请求都必须重新生成该 token 。
  2. 每当应用程序 B 想要向我们的 API 发出请求时,请检查事件的 IDP session 。

我对使用这两种解决方案中的任何一种都犹豫不决,因为每当用户与应用程序交互时,它们都需要向 IDP 发出额外请求。还有其他策略可以解决这个问题吗?

编辑

感谢 sdoxsee 的回答,这表明需要更多澄清。我应该提到,注销应用程序 A 或应用程序 B 也会使用户退出 IDP session 。但是,由于应用程序 B 在浏览器本地存储中具有有效的访问 token ,因此当用户导航到应用程序 B 时,尽管没有事件的 IDP session ,他们仍将“登录”到应用程序 B。希望这能提供更多澄清。

最佳答案

除非您退出 IDP,否则即使您结束客户端 session ,您也会立即自动重新登录到客户端应用程序中。您必须结束 IDP(或 OP) session 。即,如果您未注销 Google map 、YouTube、Google 云端硬盘,也不会通过注销您的 Google 帐户 (IDP/OP) 来注销 Gmail。使用 oidc 注销(我见过的实现)的最常见方法在实现草案中得到了体现:http://openid.net/specs/openid-connect-session-1_0.html#RPLogout

注意。这不是 oidc 规范本身的一部分,因此 OP 实现可能没有这个。

根据编辑的问题进行更新:

dhouston,据我了解,您不能简单地注销 RP(客户端)和 OP(身份提供商),而是所有在 OP 期间登录的 RP OP session 。这比较棘手,但也有一份草案是建立在我之前提到的草案的基础上的。 http://openid.net/specs/openid-connect-frontchannel-1_0.html

警告:我自己还没有尝试过。基本思想是,OP 跟踪已通过其 session 登录的 RP 列表,并启动每个 RP 的注销。同样,这不在 OIDC 规范中,但遵循实现草案可能比推出自己的策略更明智。

可能还有其他实现草案可以解决此问题,因此如果此草案没有帮助,请搜索更多草案(引用此草案),因为可能会与其他选项进行比较。

关于oauth-2.0 - SPA 中的 OIDC session 管理(单点登录),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50883829/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com