通过使用@ImportResource批注,我能够集成Spring Boot和Spring Security SAML。

现在,我要继续进行以下操作:


用户选择一个IdP [DONE]。
它执行登录(成功)[DONE]。
SP获得用户数据(通过分析SAMLCredential对象)[DONE]。
网络应用程序必须检查通过SAML检索到的用户ID(例如电子邮件)是否在我自己的数据库中。
a)如果是,则webapp从数据库读取角色并设置相关特权。
b)如果否,则webapp必须执行重定向到注册页面,才能将用户插入系统。


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

最佳答案

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

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

10-08 03:34