当前位置: 首页 > 知识库问答 >
问题:

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

魏鹤轩
2023-03-14

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

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

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

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

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

共有2个答案

孟成化
2023-03-14

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

一般模式

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

可扩展性

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

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

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

供应商

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

韦绍晖
2023-03-14

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

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

所以您有以下选择:

  1. 最常见的。使用登录页,让用户选择要使用的IdP。例如,Epic games允许您从8个列表中选择IdP。一旦用户选择了它,您就可以通过将他的请求定向到正确的IdP来进行操作

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

 类似资料:
  • 我已经创建了身份提供程序,并且从浏览器中它工作正常。 参考:密钥斗篷身份提供程序后代理登录抛出错误 从浏览器,我可以使用外部IDP登录,如果外部IDP用户不在keycloak中,它会在keyclock中创建,这绝对没问题,并重定向到仪表板。 但我的问题是,我们如何用keycloak rest api实现这个流程? 是否有任何api用于使用外部IDP登录,并将获得外部IDP的令牌以及密钥斗篷的令牌?

  • 我已经设置了AD DS、AD FS,并导出了自签名证书。我已从链接中获得元数据文件: 然而,当我尝试加载它以创建用于创建SAML2.0 IAM角色的身份提供程序时, 它指出此错误: 我们在处理您的请求时遇到以下错误:无法解析元数据 你能帮忙吗?ADFS联邦元数据xml内容/文件中需要更改的是什么?

  • 在Java8上运行的一小部分示例代码中,我试图遵循bc-fips-1.0.2.jar用户指南Legion of the Bouncy Castle Inc. BC-FJA 1.0.2(Bouncy Castle FIPSJavaAPI)用户指南Date: 09/14/19: 注意:对FIPS模式的支持在Java 1.9中似乎已经开始消失,已经确认从Java 11开始它是一个空操作。对于Java 1

  • 现在,我们有了集成执行器。我希望我的执行器endpoint可以通过基本认证在浏览器中访问。 为此,我用@order(1)添加了WebSecurityConfigurerAdapter的一个实现。它在浏览器上工作得很好。但是,当我从angualar应用程序调用登录url时,它为/oauth/token url给出了401个未经授权的错误,因此我无法从ui应用程序登录。 任何帮助将感谢解决此错误。 类

  • 问题内容: 我正在使用Spring 4.0.8 RELEASE和Spring-Security 3.2.5 RELEASE 我正在使用HTTP Digest构建REST WebService,只有注册用户可以访问。 我的web.xml是这样的: applicationContext.xml包含我的Controller / DAO,对此很重要,仅此而已: 现在,security-context.xm

  • 我是AWS的新手,正在学习Cognito池。 我计划使用与Cognito联合身份池连接的Cognito用户池。我不想使用带有托管用户界面功能的登录或任何其他登录用户界面登录。 以下情况是否属实/可能:- 从后端使用用户名和密码调用一些Cognoto API时,它可以自动调用配置的用户池联合身份提供程序来验证用户,然后生成JWT令牌。如果是,请您为我指点/指导。 我真的很感激任何帮助。提前谢谢。