我已成功配置我的应用程序以支持基本,基于表单和OAuth2身份验证,但尝试在OAuth中自定义ClientDetailsUserDetailsService时遇到了一些麻烦。我注意到的行为是,尽管我尝试注入新的自定义实现,但始终使用Spring OAuth ClientDetailsUserDetailsService。
我想自定义此类的原因是返回一个自定义的User Details对象,类似于我用于Basic Auth和Form身份验证的对象。
我已阅读网站上与此相同主题相关的多个帖子,但无法使用建议的方法解决问题(即:Previous post)
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对象中设置用户详细信息服务,即: @覆盖 public void configure(HttpSecurity http)抛出异常{
http
.requestMatchers().antMatchers("/oauth/**")
.requestMatchers().antMatchers("/api-token/**")
.authorizeRequests()
.anyRequest().authenticated();
http.userDetailsService(clientDetailsUserService());
http.authenticationProvider(oauthDaoAuthenticationProvider(encryptionService));
}
创建一个新的DaoAuthenticationProvider Bean并为oauth请求手动设置我的自定义用户详细信息服务。
非常感谢任何建议或帮助,我确实让OAuth工作,但是想要调整实现,而不必破解Spring类来实现它。谢谢!