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

Posted

技术标签:

【中文标题】如何使用数据库中的数据丰富 Oauth2 身份验证?【英文标题】:How to enrich Oauth2 authentication with data from database? 【发布时间】:2019-10-19 08:57:06 【问题描述】:

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

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

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

我还希望我可以通过电子邮件验证来自 google 和 facebook 帐户的同一用户。

我应该实现哪些接口来实现无缝身份验证 通过电子邮件/密码、facebook、google 帐户访问同一用户?

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

【问题讨论】:

【参考方案1】:

这个答案是假设一次只使用一个身份验证提供程序机制,而不是一起使用。 要实现此目标,您必须在授权服务器配置中自动装配身份验证管理器。此身份验证管理器 bean 将是有条件的。您可以在外部 application.properties 文件中提及必须使用哪种身份验证机制。然后假设您希望 facebook 作为身份验证提供者创建一个代码如下所示的类

public class FacebookAuthenticationProvider

@Autowired
AuthenticationManagerBuilder auth;

@Override
public void configure()
        auth.authenticationProvider(/**add desired authentication provider here**/);
   

类似 google、LDAP 等都可以。因此,每当 Spring 应用启动时,在配置 Authorization Server 时将使用外部属性文件中的身份验证提供程序提供程序。

【讨论】:

以上是关于如何使用数据库中的数据丰富 Oauth2 身份验证?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Spring Boot 中实现 oAuth2 和 JWT 身份验证? [关闭]

如何使用 oAuth2 对 SPA 用户进行身份验证?

当我拥有客户端 ID 和客户端密码时,如何从使用 OAuth2.0 身份验证的 API 获取数据? (亮稿)

如何使用 Spring Boot + Angular 处理外部 OAuth2 身份验证

为啥 OAuth2 身份验证服务器使用 jdbc 数据源返回 401 错误?

如何有单独的身份验证源? (一个用于 Oauth2,一个用于基于表单的登录)