【问题标题】:Select Identity Provider Locally with Spring Security's SAML 2.0使用 Spring Security 的 SAML 2.0 在本地选择身份提供者
【发布时间】:2021-12-22 17:39:04
【问题描述】:

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

Spring's SAML 2.0 documentation 中的所有内容都有意义。我已经阅读了很多有用的教程including this one,这些教程与我现有的代码相似。

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

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

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

【问题讨论】:

  • 如果您知道给定用户的 IdP,您需要做的就是用正确的“材料”构造一个 SAML 请求。对于简单的场景,IdP 的实体 ID(在请求中成为 Issuer)是您识别 IdP 所需的全部/大部分。 Spring 根据客户端注册 ID 为您完成所有这些工作:请参阅 doc

标签: java spring spring-security saml-2.0 spring-security-saml2


【解决方案1】:

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

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

所以你有以下选择:

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

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

【讨论】:

    【解决方案2】:

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

    一般模式

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

    可扩展性

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

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

    这里有一个recent article 来展示它是如何工作的 - 用户名验证器是有趣的部分。

    供应商

    很遗憾,Spring 可能无法提供您想要的选项。不过,这应该稍微澄清一下您的要求。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-24
      • 2013-04-19
      • 2017-12-26
      • 1970-01-01
      • 2018-08-10
      • 2021-03-22
      相关资源
      最近更新 更多