У кого-нибудь есть Пример обслуживания UserDetails для Spring Cloud OAuth2 и Active Directory? - PullRequest
0 голосов
/ 10 июня 2018

У меня есть сервер авторизации OAuth2 Spring Cloud (Edgeware.SR3), настроенный с помощью пользовательских токенов JWT.Я получаю IllegalStateException, UserDetailsService требуется ошибка при достижении конечной точки token_refresh.

У кого-нибудь есть пример использования службы UserDetails для Active Directory для этого сценария?Я предполагаю, что вызов для обновления токена фактически проверяет 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();
}

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...