весеннее облако шлюз безопасности oauth2 - PullRequest
0 голосов
/ 20 марта 2019

У меня есть служба аутентификации с AuthorizationServer, которая создает токен JWT, и в той же службе, что и у меня, и ResourceServer. Когда я запускаю сервис и пытаюсь получить доступ к токену, думал Почтальон, он возвращает токен JWT. После этого, когда я пытаюсь достичь на этом сервисе конечной точки "/ home", которая требует "аутентификации", она работает идеально.

Моя проблема заключается в том, как сделать клиент oauth2 шлюза Spring Cloud Gateway и когда я пытаюсь достичь какой-либо конечной точки с токеном носителя для аутентификации запроса через службу аутентификации. Я борюсь много времени и не могу найти правильное решение для меня.

Мой Сервер авторизации:

@Configuration
@EnableAuthorizationServer
public class AuthorizationServer extends AuthorizationServerConfigurerAdapter {

    private static final String ID_CLIENT = "client";
    private static final String SECRET = "secret";
    private static final String AUTHORIZATION_CODE = "authorization_code";
    private static final String SCOPE = "user_info";
    private static final String TOKEN_KEY_ACCESS = "permitAll()";
    private static final String CHECK_TOKEN_ACCESS = "isAuthenticated()";
    private static final String SIGNING_KEY = "privateKey";
    private static final String PASSWORD = "password";

    @Autowired
    private AuthenticationManager authenticationManager;
    @Autowired
    private PasswordEncoder passwordEncoder;

    @Override
    public void configure(AuthorizationServerSecurityConfigurer security) throws Exception {
        security.tokenKeyAccess(TOKEN_KEY_ACCESS)
                .checkTokenAccess(CHECK_TOKEN_ACCESS);
    }

    @Override
    public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
        clients
                .inMemory()
                .withClient(ID_CLIENT)
                .secret(passwordEncoder.encode(SECRET))
                .autoApprove(true)
                .authorizedGrantTypes(AUTHORIZATION_CODE, PASSWORD)
                .scopes(SCOPE)
                .accessTokenValiditySeconds(20000)
                .refreshTokenValiditySeconds(20000);
    }

    @Override
    public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
        endpoints
                .authenticationManager(authenticationManager)
                .tokenStore(tokenStore())
                .accessTokenConverter(tokenConverter());
    }

    @Bean
    public JwtAccessTokenConverter tokenConverter() {
        JwtAccessTokenConverter converter = new JwtAccessTokenConverter();
        converter.setSigningKey(SIGNING_KEY);
        converter.setVerifierKey(SIGNING_KEY);
        return converter;
    }

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

My ResourcesServer

@Configuration
@EnableResourceServer
public class ResourcesServer extends ResourceServerConfigurerAdapter {

    private static final String CLIENT_ID = "clientId";
    private static final String SECRET = "secret";
    private static final String TOKEN_ENDPOINT_URL = "http://localhost:9004/oauth/check_token";

    @Override
    public void configure(ResourceServerSecurityConfigurer resources) throws Exception {
        resources.tokenServices(tokenServices());
    }

    @Bean
    public RemoteTokenServices tokenServices() {
        RemoteTokenServices tokenServices = new RemoteTokenServices();
        tokenServices.setCheckTokenEndpointUrl(TOKEN_ENDPOINT_URL);
        tokenServices.setClientId(CLIENT_ID);
        tokenServices.setClientSecret(SECRET);
        return tokenServices;
    }
}

У меня есть и WebSecurityConfiguration с аутентификацией LDAP ...

...