如何让两个单独的 SAML 应用程序登录到 IdP 而无需登录两次?

Posted

技术标签:

【中文标题】如何让两个单独的 SAML 应用程序登录到 IdP 而无需登录两次?【英文标题】:How can I have two separate SAML applications login to an IdP without logging in twice? 【发布时间】:2016-12-18 11:38:19 【问题描述】:

我有四个自定义应用程序(即 SP),使用 Auth0 或 OneLogin 作为我的 IdP。在 Auth0 中,我为每个应用程序创建一个连接器。当我登录一个应用程序然后打开另一个应用程序时,我会被重定向到 Auth0 以再次登录。

是否可以在第二个应用程序上自动将用户登录到我的 IdP(或 Auth0/OneLogin),而无需单击 Auth0 上的登录按钮,因为他们已经通过 Auth0 进行了身份验证?

不幸的是,需要将第二个应用程序嵌入到第一个应用程序中,让用户登录到第一个应用程序然后在 iFrame 中再次登录是一个糟糕的用户体验。

【问题讨论】:

【参考方案1】:

Auth0 Dev here,是的,这是支持 Auth0 中的开箱即用的,为此,您必须在客户端中将 Use Auth0 as IdP 设为“ON”。执行此操作时,如果客户端处于活动状态,Auth0 将记住客户端 10 小时至 3 天。

您的场景中的流程将是

用户登录到任何应用程序。 用户访问其他应用程序。 其他应用程序看不到会话。 另一个应用程序重定向到/authorize端点。 Auth0 注意到会话并立即将其重定向回您的应用程序。

这在https://auth0.com/docs/sso有更详细和解释

【讨论】:

【参考方案2】:

SSO 不必再次重新输入凭据,但您只有在重定向到 IDP 并且您在后台进行身份验证(即无缝)后才能获得 SSO。

所以你仍然需要做一些事情来触发重定向。

您可以以编程方式重定向到需要身份验证的虚拟页面,然后通过您的客户端堆栈重定向,例如OWIN OIDC。

此外,Cookie 没有标准,因此除非将它们联合在一起,否则您不会跨多个 IDP 获得 SSO。

因此,如果没有联盟并且您登录到 Auth0,您仍然必须登录到 OneLogin。

【讨论】:

以上是关于如何让两个单独的 SAML 应用程序登录到 IdP 而无需登录两次?的主要内容,如果未能解决你的问题,请参考以下文章

要求使用相同的 IDP 重新进行身份验证 - Spring SAML

即使在 IDP 使用 SAML 成功登录后,获取身份验证对象仍为空

使用 Spring Security saml 的 IDP 会话超时

Okta SAML 登录不成功

基于 Confluence 6 数据中心的 SAML 单点登录设置你的身份提供者

Confluence 6 数据中心的 SAML 单点登录最佳实践和故障排除