使用 Spring Security 的 SAML 2.0 在本地选择身份提供商

Mat*_*ich 6 java spring spring-security saml-2.0 spring-security-saml2

我正在使用 Spring Security 的 SAML 2.0 将我的服务提供者连接到多个身份提供者。

Spring 的 SAML 2.0 文档中的所有内容都有意义。我读过许多有用的教程,包括这篇教程,它与我现有的代码类似。

但是,我缺少在哪里以及如何为给定用户选择身份提供者

我了解SAMLDiscovery可用于将身份提供商选择委托给第三方服务。我还了解如何配置多个身份提供商。但我正在寻找一种方法来运行我自己的代码(即检查数据库),然后触发对所选身份提供商(而不是第三方服务)的 SAML 请求。我预计在SAMLEntryPoint被击中时会发生这种情况。我看到提到在初始请求中指定 EntityID。这有关系吗?

我正在尝试执行 SP 发起的 SAML 2.0 SSO。有人可以指出我可以在哪里根据当前用户手动指定 IdP 吗?

Ita*_*bel 3

据我所知,SAML 没有提供任何您想要的机制。SAML 发现用于找出您的应用程序存在哪个 IdP。

您的问题是,在用户尝试登录之前您不知道用户是谁,而当用户登录时,则意味着他已经知道他想要使用哪个 IdP。

所以你有以下选择:

  1. 最常见的。使用可让用户选择要使用的 IdP 的登录页面。例如,Epic games允许您从 8 个 IdP 列表中选择 IdP。一旦用户选择了它,您就可以将他的请求定向到正确的 IdP。
  2. 如果您事先知道哪个用户属于哪个 IdP,那么您可以拥有一个仅允许用户输入其用户名的页面。一旦他执行此操作,您就可以在数据库中检查该用户所属的 IdP 并将重定向消息发送回浏览器。虽然这可行,但它不允许用户选择要使用哪个 IdP,从而将这项工作推到了后端的肩上。
  3. 执行步骤 2 一次并在用户的浏览器中保存 cookie。然后,当用户尝试从同一台计算机再次登录另一个会话时,您可以自动将他重定向到正确的 IdP。使用此选项,除了第一次之外,一切都会自动完成。

需要考虑的一件事。从安全角度来看,向黑客提供任何信息都是一种不好的做法,因此选项 2,3 确实会向黑客透露哪个 IdP 属于哪个用户。在我看来,这并不是一个很大的违规行为,并且可以实施。