我目前正在使用 OIDC 在多个应用程序上实施 SSO。我不确定如何在单页应用程序 (SPA) 中处理单点注销以进行基于令牌的身份验证。
考虑两个应用程序。应用 A 是使用 OAuth2 授权代码流的标准 Spring MVC 应用,应用 B 是使用隐式流的 SPA。如果用户已登录应用程序 A,则当他们导航到应用程序 B 时,他们会通过 SSO 自动登录,这是意料之中的。但是,如果用户退出应用程序 A 然后导航到应用程序 B,当前应用程序 B 仍会加载并允许访问 apis,因为它具有存储在浏览器本地存储中的有效 OAuth2 访问令牌。我希望应用程序 B 在提出任何其他请求之前要求用户重新进行身份验证。
在 SPA 中进行单点注销的推荐方法是什么,因为无法让身份提供者向服务器端点发送“注销”请求?
我想到的几个可能的解决方案是:
我对使用这两种解决方案中的任何一种都犹豫不决,因为它们需要在用户与应用程序交互时向 IDP 发出额外请求。有没有其他策略可以解决这个问题?
编辑
感谢 sdoxsee 的回答,这使我们需要更多的澄清。我应该提到退出应用程序 A 或应用程序 B 也会使用户退出 IDP 会话。但是,由于应用程序 B 在浏览器本地存储中具有有效的访问令牌,因此当用户导航到应用程序 B 时,尽管没有活动的 IDP 会话,他们仍将“登录”到应用程序 B。希望这能提供更多说明。
single-sign-on oauth-2.0 single-page-application openid-connect