如何让两个单独的 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 会话超时