我可以使用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等。谢谢。
答案 0 :(得分:4)
我会使用两个应用程序的隐式流程。它可以像这样工作:
这样,每个应用程序都会获得自己的令牌(是的,它们是针对特定客户端发布的)。并且用户不会被第二个应用程序的身份验证所困扰。但是步骤3中的OIDC行为不是标准化的,而是取决于实施。例如,它可能取决于应用程序请求的范围 - 如果两个应用程序不同,OIDC也可能要求对第二个应用程序进行身份验证。
如果您还需要单点注销,则有一个规范: http://openid.net/specs/openid-connect-session-1_0.html 您在应用中创建了两个iframe - 一个用于检测OIDC会话更改,另一个用于第一个iframe与应用之间的通信。该规范甚至包含iframe文档的示例。