繁体   English   中英

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

[英]Select Identity Provider Locally with Spring Security's SAML 2.0

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

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

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

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

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

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

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

所以你有这些选择:

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

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

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

一般模式

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

可扩展性

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

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

这是最近的一篇文章来展示它是如何工作的 - 用户名身份验证器是测试部分。

供应商

不幸的是,并非所有提供商都提供您想要的选项。 我意识到我的回答并不能立即解决您的问题,但我希望它有助于澄清要求。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM