Spring SAML 凭证和平台帐户

Posted

技术标签:

【中文标题】Spring SAML 凭证和平台帐户【英文标题】:Spring SAML credentials and platform accounts 【发布时间】:2014-06-13 17:54:07 【问题描述】:

我能够使用 @ImportResource 注释集成 Spring Boot 和 Spring Security SAML。

现在,我想继续:

    用户选择 IdP [DONE]。 它执行登录(成功)[DONE]。 SP 获取用户数据(通过解析 SAMLCredential 对象)[DONE]。 webapp 必须检查通过 SAML 检索到的用户 ID(例如电子邮件)是否存在于我自己的数据库中。 a) 如果是,webapp 从数据库中读取角色并设置相关权限。 b) 如果不是,webapp 必须执行重定向到注册页面,以便将用户插入系统。

通过使用 UserDetailsS​​ervice 实现来执行第 4 点和第 5 点有意义,还是让我设置定义身份验证提供程序、过滤器等的安全上下文?

【问题讨论】:

【参考方案1】:

您应该实现 org.springframework.security.saml.userdetails.SAMLUserDetailsS​​ervice 并将其插入 samlAuthenticationProvider bean。如果用户不存在,您应该抛出 UsernameNotFoundException 异常,否则只需从您的数据库中填充并返回数据。

除此之外,您应该实现自己的 org.springframework.security.web.authentication.AuthenticationFailureHandler 并将其插入 samlWebSSOProcessingFilter bean。此实现将通过作为参数发送的 UsernameNotFoundException 调用,然后您可以将用户重定向到正确的注册页面作为对其的反应。

【讨论】:

不客气 V。如果您对答案感到满意,请点击答案旁边的复选标记以将其从空心切换为绿色。 有没有办法将 nameID(来自 SAMLCredential 对象)传递给失败处理程序,以便设置重定向页面的模型属性? UsernameNotFoundException 有一个带有“extraInformation”字段的构造函数。只需将其放在那里并在您的 failureHandler 中从异常中加载一次。 好的,它可以工作,但我看到这个构造函数已被弃用。您是否知道根据 Spring 最佳实践是否有正确的方法来执行此段落? 正如它在异常的文档中所说:“如果您确实需要其他信息,请使用异常消息或使用自定义异常”,换句话说,您可以使用自己的扩展 UsernameNotFoundException 允许您存储NameID 并扔掉它。

以上是关于Spring SAML 凭证和平台帐户的主要内容,如果未能解决你的问题,请参考以下文章

Spring - 如何使用 SAML 2.0 实现单点登录

OKTA 的 Spring Security Saml 配置错误

如何在 Spring Security SAML 示例中配置 IDP 元数据和 SP 元数据?

Spring Security SAML 请求在证书中包含 ^M 个字符

Spring-SAML:传入的 SAML 消息无效

是否有用于将 SAML 与 Spring Boot 应用程序集成的 Spring Boot SAML 客户端?