Spring / Springboot OAuth2 - 集成自定义ClientDetailsUserDetailsS​​ervice

时间:2017-06-05 15:13:53

标签: spring oauth-2.0 userdetailsservice

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

我想自定义此类的原因是返回一个自定义的User Details对象,类似于我用于Basic Auth和Form身份验证的对象。

我已阅读网站上与此相同主题相关的多个帖子,但无法使用建议的方法解决问题(即:Previous post

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

我试过的事情:

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

  2. 在GlobalAuthenticationConfigurerAdapter中设置用户详细信息

  3. @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对象中设置用户详细信息服务,即: @覆盖 public void configure(HttpSecurity http)抛出异常{

      http
          .requestMatchers().antMatchers("/oauth/**")
          .requestMatchers().antMatchers("/api-token/**")
          .authorizeRequests()
          .anyRequest().authenticated();
      http.userDetailsService(clientDetailsUserService());
      http.authenticationProvider(oauthDaoAuthenticationProvider(encryptionService));
      

      }

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

    3. 非常感谢任何建议或帮助,我确实让OAuth工作,但是想要调整实现,而不必破解Spring类来实现它。谢谢!

0 个答案:

没有答案