1

我已经成功地将我的应用程序配置为支持基本、基于表单和 OAuth2 身份验证,但是在尝试自定义 OAuth 中的 ClientDetailsUserDetailsS​​ervice 时遇到了一些麻烦。我注意到的行为是,尽管我尝试注入新的自定义实现,但始终使用 Spring OAuth ClientDetailsUserDetailsS​​ervice。

我想要自定义此类的原因是返回一个自定义用户详细信息对象,类似于我用于基本身份验证和表单身份验证的对象。

我已经阅读了网站上与同一主题相关的多篇文章,但无法使用建议的方法解决问题(即:一篇文章)

无论您注入什么,Spring 的 AuthorizationServerSecurityConfigurer 类似乎总是使用 ClientDetailsUserDetailsS​​ervice。

我尝试过的事情:

  1. 创建一个引用我的自定义用户详细信息 impl 的 @Bean,并在 AuthorizationServerEndpointsConfigurer.userDetailsS​​ervice 中设置自定义用户详细信息。

  2. 在 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
}

}

  1. 创建了一个自定义 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));
    

    }

  2. 创建一个新的 DaoAuthenticationProvider Bean 并为 oauth 请求手动设置我的自定义用户详细信息服务。

非常感谢任何建议或帮助,我确实有 OAuth 工作,但想稍微调整一下实现,而不必侵入 Spring 类来实现它。谢谢!

4

0 回答 0