有没有人有Spring Cloud OAuth2和Active Directory的UserDetails服务示例?

时间:2018-06-10 20:49:29

标签: spring-security spring-cloud spring-oauth2

我有一个配置了自定义JWT令牌的Spring Cloud(Edgeware.SR3)OAuth2授权服务器。我收到IllegalStateException,当我点击token_refresh端点时,UserDetailsS​​ervice是必需的错误。

是否有人为此方案提供了为Active Directory执行UserDetails服务的示例?我假设刷新令牌的调用实际上是在用户仍然有效时检查AD,例如自上次成功登录后未被禁用。

未显示我是否也在自定义令牌增强器中与AWS Cognito进行集成,这也是全部工作。只剩下刷新令牌。

@Configuration
public class ServiceConfig extends GlobalAuthenticationConfigurerAdapter {

@Value("${ldap.domain}")
private String DOMAIN;

@Value("${ldap.url}")
private String URL;

@Override
public void init(AuthenticationManagerBuilder auth) {
    auth.authenticationProvider(activeDirectoryLdapAuthenticationProvider());
}

@Bean
public AuthenticationManager authenticationManager() {
    return new ProviderManager(Arrays.asList(activeDirectoryLdapAuthenticationProvider()));
}
@Bean
public AuthenticationProvider activeDirectoryLdapAuthenticationProvider() {
    ActiveDirectoryLdapAuthenticationProvider provider = new ActiveDirectoryLdapAuthenticationProvider(DOMAIN, URL);
    provider.setConvertSubErrorCodesToExceptions(true);
    provider.setUseAuthenticationRequestCredentials(true);
    return provider;
}

}
--------
@Configuration
public class AuthorizationServerConfiguration extends AuthorizationServerConfigurerAdapter {

private final AuthenticationManager authenticationManager;


@Autowired
public AuthorizationServerConfiguration(AuthenticationManager authenticationManager){
    super();
    this.authenticationManager = authenticationManager;
}

@Value("${signing.key}")
private String signingKey;


@Bean
public JwtAccessTokenConverter accessTokenConverter(){
    final JwtAccessTokenConverter accessTokenConverter = new JwtAccessTokenConverter();
    accessTokenConverter.setSigningKey(signingKey);
    return accessTokenConverter;
}

@Bean
public TokenStore tokenStore(){
    return new JwtTokenStore(accessTokenConverter());
}

@Bean
@Primary
public DefaultTokenServices tokenServices(){
    final DefaultTokenServices tokenServices = new DefaultTokenServices();
    tokenServices.setTokenStore(tokenStore());
    tokenServices.setSupportRefreshToken(true);
    return tokenServices;
}

@Override
public void configure(final ClientDetailsServiceConfigurer clients) throws Exception {

    clients.inMemory()
            .withClient("${client.id}")
            .secret("${client.secret}")
            .authorizedGrantTypes("password","refresh_token","authorization_code","client_credentials")
            .refreshTokenValiditySeconds(3600 *24)
            .scopes("xx","xx")
            .autoApprove("xxxx")
            .accessTokenValiditySeconds(3600);
}

@Override
public void configure(final AuthorizationServerEndpointsConfigurer endpoints){

    TokenEnhancerChain tokenEnhancerChain = new TokenEnhancerChain();
    tokenEnhancerChain.setTokenEnhancers(
            Arrays.asList(tokenEnhancer(),accessTokenConverter()));

    endpoints
            .tokenStore(tokenStore())
            .tokenEnhancer(tokenEnhancerChain)
            .authenticationManager(authenticationManager)
            .allowedTokenEndpointRequestMethods(HttpMethod.GET,HttpMethod.POST)
            .accessTokenConverter(accessTokenConverter());
}

@Override//oauth/check_token?token={access_token}
public void configure(final AuthorizationServerSecurityConfigurer security)throws Exception {
    security.checkTokenAccess("permitAll()");
    super.configure(security);
}

@Bean
public TokenEnhancer tokenEnhancer(){
    return new CustomTokenEnhancer();
}

}

0 个答案:

没有答案