我将spring-boot-starter-oauth2-client与webflux一起使用(Spring Boot 2.2.0.M3)。
我希望我的控制器方法从数据库中获取带有userId的主体数据。
我意识到我应该实现ReactiveUserDetailsService,ReactiveUserDetailsPasswordService来使用登录名和密码对用户进行身份验证。
我还希望我可以通过电子邮件从Google和Facebook帐户中验证同一用户。
我应该实现哪些接口以实现无缝身份验证 通过电子邮件/密码,facebook,google帐户为同一用户提供服务?
默认情况下,在我的控制器方法中,我具有用于Oauth2身份验证和UserDetails身份验证的不同的Principal对象
答案 0 :(得分:2)
此答案是基于以下假设:一次仅使用一种身份验证提供程序机制,而不是全部一起使用。
为了实现此目标,您必须在“授权服务器配置”中自动连接身份验证管理器。此身份验证管理器bean将是有条件的。您可以在外部application.properties文件中提及必须使用哪种身份验证机制。然后,假设您要使用Facebook作为身份验证提供程序,创建一个其代码如下所示的类
public class FacebookAuthenticationProvider{
@Autowired
AuthenticationManagerBuilder auth;
@Override
public void configure(){
auth.authenticationProvider(/**add desired authentication provider here**/);
}
}
可以完成google,LDAP等的silimary。因此,无论何时启动Spring应用程序,在配置Authorization Server时都将使用外部属性文件中的身份验证提供程序提供程序。