我已经成功地将我的应用程序配置为支持基本、基于表单和 OAuth2 身份验证,但是在尝试自定义 OAuth 中的 ClientDetailsUserDetailsService 时遇到了一些麻烦。我注意到的行为是,尽管我尝试注入新的自定义实现,但始终使用 Spring OAuth ClientDetailsUserDetailsService。
我想要自定义此类的原因是返回一个自定义用户详细信息对象,类似于我用于基本身份验证和表单身份验证的对象。
我已经阅读了网站上与同一主题相关的多篇文章,但无法使用建议的方法解决问题(即:上一篇文章)
无论您注入什么,Spring 的 AuthorizationServerSecurityConfigurer 类似乎总是使用 ClientDetailsUserDetailsService。
我尝试过的事情:
创建一个引用我的自定义用户详细信息 impl 的 @Bean,并在 AuthorizationServerEndpointsConfigurer.userDetailsService 中设置自定义用户详细信息。
在 GlobalAuthenticationConfigurerAdapter 中设置用户详细信息
@Configuration @Order(Ordered.HIGHEST_PRECEDENCE) 公共类 AuthenticationManagerConfiguration 扩展 GlobalAuthenticationConfigurerAdapter {
@Autowired
private UserDetailsService userService;
@Override
public void init(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(clientDetailsUserDetailsService());// Inject custom
}
}
创建了一个自定义 WebSecurityConfigurerAdapter 并在 HttpSecurity 对象中设置用户详细信息服务,即:@Override public void configure(HttpSecurity http) throws Exception {
http .requestMatchers().antMatchers("/oauth/**") .requestMatchers().antMatchers("/api-token/**") .authorizeRequests() .anyRequest().authenticated(); http.userDetailsService(clientDetailsUserService()); http.authenticationProvider(oauthDaoAuthenticationProvider(encryptionService));
}
创建一个新的 DaoAuthenticationProvider Bean 并为 oauth 请求手动设置我的自定义用户详细信息服务。
非常感谢任何建议或帮助,我确实有 OAuth 工作,但想稍微调整一下实现,而不必侵入 Spring 类来实现它。谢谢!