我能够使用 @ImportResource 注释集成 Spring Boot 和 Spring Security SAML。
现在,我想继续如下:
- 用户选择 IdP [完成]。
- 它执行登录(成功)[完成]。
- SP 获取用户数据(通过解析 SAMLCredential 对象)[完成]。
- 网络应用必须检查通过 SAML 检索到的用户 ID(例如电子邮件)是否存在于我自己的数据库中。
- a) 如果是,则 Web 应用程序从数据库读取角色并设置相关权限。
b) 如果否,网络应用必须执行到注册页面的重定向,以便将用户插入系统。
通过使用 UserDetailsService 实现来执行第 4 点和第 5 点是否有意义,或者我是否需要设置定义身份验证提供程序、过滤器等的安全上下文?
最佳答案
您应该实现org.springframework.security.saml.userdetails.SAMLUserDetailsService并将其插入samlAuthenticationProvider bean。如果用户不存在,您应该抛出 UsernameNotFoundException 异常,否则只需填充并从数据库返回数据。
最重要的是,您应该实现自己的 org.springframework.security.web.authentication.AuthenticationFailureHandler 并将其插入到 samlWebSSOProcessingFilter bean 中。将使用作为参数发送的 UsernameNotFoundException 来调用此实现,然后您可以将用户重定向到正确的注册页面作为对此的 react 。
关于java - Spring SAML 凭证和平台帐户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23336792/