1

我可以使用OpenId Connect在两个单页应用程序(SPA)之间实现SSO吗?如果是的话,会有什么流量。OpenId Connect,SSO和SPA

场景:App1(SPA)启动并使用其中一个OIDC流获取Id_token和acccess标记。然后它会产生许多REST API调用。稍后,用户点击一个可打开第二个SPA App2的按钮。这两款应用都属于同一家公司。 App2可以使用Id_token和App1获得的令牌来获得SSO吗?查看规范,答案似乎是否定的,因为这些令牌是针对特定客户的。使用OIDC在两个SPA之间启用SSO的任何其他流程?或者它超出了OpenId Connect的范围,在这种情况下,我们必须考虑像CA,IBM等传统的解决方案。谢谢。

回答

3

我会使用两个应用程序的隐式流。它可以这样工作:

  1. App1转到OpenID Connect服务器的auth端点。为了得到令牌,用户必须得到认证,并且OIDC服务器可以为他创建会话(由cookie标识)。
  2. App1用App2打开一个新选项卡。
  3. App2还没有令牌,因此它会转到OIDC身份验证端点。 OIDC服务器识别在步骤1中创建的会话,并且可以决定释放令牌而不进行认证并重定向回到App2。

这样,每个应用程序都会获得自己的令牌(是的,它们是针对特定客户端发布的)。而且用户不会为第二个应用程序的身份验证感到困扰。但是,步骤3中的OIDC行为不是标准化的,取决于实施。例如,它可能取决于应用程序请求的范围 - 如果它们对于两个应用程序都不相同,则OIDC也可能需要对第二个应用程序进行身份验证。

如果您还需要单点登录了,对于一个规范: http://openid.net/specs/openid-connect-session-1_0.html 你创建你的Apps两个内部框架 - 一个用于检测OIDC会话的变化,一个是第一个iframe和应用程序之间的通信。该规范甚至包含iframe文档的示例。

+0

谢谢。在阅读规范的第3.1.2.3节后,我们得出了相同的结论,该规则说明确切的方法取决于Auth服务器。现在,我们需要真实地尝试它。 – user7898267