如何用数据库中的数据丰富Oauth2身份验证?

时间:2019-06-03 19:35:30

标签: spring-security spring-security-oauth2

我将spring-boot-starter-oauth2-client与webflux一起使用(Spring Boot 2.2.0.M3)。

我希望我的控制器方法从数据库中获取带有userId的主体数据。

我意识到我应该实现ReactiveUserDetailsS​​ervice,ReactiveUserDetailsPasswordService来使用登录名和密码对用户进行身份验证。

我还希望我可以通过电子邮件从Google和Facebook帐户中验证同一用户。

我应该实现哪些接口以实现无缝身份验证 通过电子邮件/密码,facebook,google帐户为同一用户提供服务?

默认情况下,在我的控制器方法中,我具有用于Oauth2身份验证和UserDetails身份验证的不同的Principal对象

1 个答案:

答案 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时都将使用外部属性文件中的身份验证提供程序提供程序。