如何使用数据库中的数据丰富 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 数据。
我意识到我应该实现 ReactiveUserDetailsService、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 身份验证? [关闭]
当我拥有客户端 ID 和客户端密码时,如何从使用 OAuth2.0 身份验证的 API 获取数据? (亮稿)
如何使用 Spring Boot + Angular 处理外部 OAuth2 身份验证