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 必须执行重定向到注册页面,以便将用户插入系统。
通过使用 UserDetailsService 实现来执行第 4 点和第 5 点有意义,还是让我设置定义身份验证提供程序、过滤器等的安全上下文?
【问题讨论】:
【参考方案1】:您应该实现 org.springframework.security.saml.userdetails.SAMLUserDetailsService 并将其插入 samlAuthenticationProvider bean。如果用户不存在,您应该抛出 UsernameNotFoundException 异常,否则只需从您的数据库中填充并返回数据。
除此之外,您应该实现自己的 org.springframework.security.web.authentication.AuthenticationFailureHandler 并将其插入 samlWebSSOProcessingFilter bean。此实现将通过作为参数发送的 UsernameNotFoundException 调用,然后您可以将用户重定向到正确的注册页面作为对其的反应。
【讨论】:
不客气 V。如果您对答案感到满意,请点击答案旁边的复选标记以将其从空心切换为绿色。 有没有办法将 nameID(来自 SAMLCredential 对象)传递给失败处理程序,以便设置重定向页面的模型属性? UsernameNotFoundException 有一个带有“extraInformation”字段的构造函数。只需将其放在那里并在您的 failureHandler 中从异常中加载一次。 好的,它可以工作,但我看到这个构造函数已被弃用。您是否知道根据 Spring 最佳实践是否有正确的方法来执行此段落? 正如它在异常的文档中所说:“如果您确实需要其他信息,请使用异常消息或使用自定义异常”,换句话说,您可以使用自己的扩展 UsernameNotFoundException 允许您存储NameID 并扔掉它。以上是关于Spring SAML 凭证和平台帐户的主要内容,如果未能解决你的问题,请参考以下文章
OKTA 的 Spring Security Saml 配置错误
如何在 Spring Security SAML 示例中配置 IDP 元数据和 SP 元数据?