OpenId Connect,SSO和SPA

时间:2017-04-20 21:46:20

标签: oauth-2.0 single-sign-on single-page-application openid-connect

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

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

1 个答案:

答案 0 :(得分:4)

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

  1. App1进入OpenID Connect服务器的auth端点。要获取令牌,用户必须经过身份验证,OIDC服务器可以为他创建会话(由cookie标识)。
  2. App1打开一个包含App2的新标签页。
  3. App2还没有令牌,所以它进入OIDC auth端点。 OIDC服务器识别在步骤1中创建的会话,它可以决定在没有身份验证的情况下释放令牌并重定向回App2。
  4. 这样,每个应用程序都会获得自己的令牌(是的,它们是针对特定客户端发布的)。并且用户不会被第二个应用程序的身份验证所困扰。但是步骤3中的OIDC行为不是标准化的,而是取决于实施。例如,它可能取决于应用程序请求的范围 - 如果两个应用程序不同,OIDC也可能要求对第二个应用程序进行身份验证。

    如果您还需要单点注销,则有一个规范: http://openid.net/specs/openid-connect-session-1_0.html 您在应用中创建了两个iframe - 一个用于检测OIDC会话更改,另一个用于第一个iframe与应用之间的通信。该规范甚至包含iframe文档的示例。