OAuth2LoginAuthenticationProvider与UserDetailsChecker一起验证是否禁用了用户

时间:2018-11-09 20:53:49

标签: spring spring-security oauth-2.0

我的安全配置具有3个身份验证提供程序:

DaoAuthenticationProvider使用UserDetailsService的简单实现,该实现从数据库中查询用户并返回org.springframework.security.core.userdetails.User对象。我还在enabled对象上使用User布尔标志,该标志由数据库状态决定-是否禁用了is帐户。默认情况下,此提供程序使用UserDetailsChecker的实现,该实现检查用户的布尔标志,并在它们中的任何一个为false时抛出异常。一切正常。

问题

但是,例如,当我使用Oauth2通过Google登录时,默认情况下OAuth2LoginAuthenticationProvider不会使用UserDetailsChecker来验证这些标志。因此,我已将检查器注入到我的OAuth2UserService的自定义实现中。

!现在,当引发异常时,ProviderManager首先处理引发的异常并将其存储为lastException,但紧随THIS CODE之后,因为OAuth2LoginAuthenticationProvider具有 parent ProviderManager集(即DaoAuthenticationProvider),然后代码继续执行并尝试通过Dao提供程序运行Oauth2身份验证并失败,最终将lastException设置为“ OAuth2LoginAuthenticationProvider” ,并且身份验证失败。

问题

如何通过Oauth / Oidc提供程序正确检查从数据库中找到的用户是否被禁用。根据{{​​1}}代码,这是不可能的,除非我自己实现它并按THIS类似的旧问题中的描述中断循环。

我正在使用最新最好的Spring Boot,Spring Security和Spring Security Oauth2库。

0 个答案:

没有答案