6

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

Spring 的 SAML 2.0 文档中的所有内容都很有意义。我已经阅读了许多有用的教程,包括这个,它与我现有的代码相似。

但是,我错过了为给定用户选择身份提供者的位置和方式

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

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

4

2 回答 2

3

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

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

所以你有这些选择:

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

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

于 2021-11-14T09:31:37.600 回答
0

这并不是一个真正的 SAML 问题,因为任何解决方案都会在标准之外发生,并且涉及在要求用户进行身份验证之前识别用户。

一般模式

  • 应用程序使用技术 A 重定向到服务提供商,例如 SAML、OpenID Connect
  • 对于这个应用程序,服务提供商被配置为运行一个动作,例如显示一个屏幕,以识别用户 - 你可能已经在 Office365 等系统中看到了这一点
  • 服务提供商然后使用某种数据查找来识别下一步的 IDP
  • 如果有多个,则提示用户选择一个,否则将自动调用默认选项
  • 然后服务提供商使用技术 B 重定向到 IDP - 可以是 SAML / OIDC / 其他

可扩展性

希望我上面的评论表明 IAM 系统是一个工具箱并且应该是可扩展的。我在 Curity 工作,我们使用可以组合的身份验证器和操作的概念 - 例如对于 MFA,但常见的选项如下:

  • 捕获用户名
  • 运行一些自定义逻辑 - 例如调用数据查找以设置下一个身份验证器的 JavaScript

这是最近的一篇文章,展示了它是如何工作的——用户名验证器是有趣的部分。

供应商

不幸的是,Spring 可能无法提供您想要的选项。不过,这应该会稍微澄清您的要求。

于 2021-11-18T20:24:11.923 回答