JWT (JWS) - подпись Asymmetri c и ссылка sh token - PullRequest
0 голосов
/ 29 марта 2020

Я борюсь с токеном refre sh

1) Поддерживает ли подписание асимметрии c токенов JWT выпуск токенов refre sh?

2) Почему мой Сервер авторизации не выдает токен refre sh на основе приведенной ниже конфигурации?

@Configuration
@EnableAuthorizationServer
public class AuthorizationServiceConfig extends AuthorizationServerConfigurerAdapter {

    ...

    @Override
    public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
        TokenEnhancerChain chain=new TokenEnhancerChain();
        chain.setTokenEnhancers(Arrays.asList(tokenEnhancer, accessTokenConverter()));
        endpoints
                .authenticationManager(authenticationManager)
                .tokenStore(jwtTokenStore())
                .tokenEnhancer(chain)
                .accessTokenConverter(accessTokenConverter())
                .reuseRefreshTokens(false);
    }    


    //Assymetric Key Signing
    @Bean
    public JwtAccessTokenConverter accessTokenConverter() {
        JwtAccessTokenConverter jwtAccessTokenConverter=new JwtAccessTokenConverter();
        try{
            KeyPairGenerator keyPairGenerator=KeyPairGenerator.getInstance("RSA");
            SecureRandom random=SecureRandom.getInstance("SHA1PRNG");
            keyPairGenerator.initialize(1024, random);
            KeyPair keyPair=keyPairGenerator.generateKeyPair();
            jwtAccessTokenConverter.setKeyPair(keyPair);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return jwtAccessTokenConverter;
    }

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

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

}

1 Ответ

2 голосов
/ 04 апреля 2020

Сервер авторизации дополнительно выдает токен refre sh во время выдачи токена доступа. Сервер авторизации типов грантов может быть: authorization_code, password, client_credentials, implicit, or refresh_token. Загрузочное приложение Spring OAuth2 по умолчанию обеспечивает поддержку клиентов для всех перечисленных выше потоков типов грантов, при условии, что вы предоставляете реализацию AuthorizationServerConfigurerAdapter, тогда нам нужно указывать типы грантов для клиентов, переопределяя класс configure(ClientDetailsServiceConfigurer clients) класса AuthorizationServerConfigurerAdapter, как в следующем примере :

        @Override
        public void configure(ClientDetailsServiceConfigurer clients) throws Exception{
            clients.inMemory()
            .withClient("your_client_id")
            .secret("your_client_secret_encoded")
            .authorizedGrantTypes("client_credentials","refresh_token")  <<--- here
            .scopes("user_info")
            .redirectUris(uri_1,uri_2,uri_n);
        }

, поэтому вы получите токен доступа вместе с токеном refre sh.

Полезный материал: чтение

См. Решение в моем втором комментарии.

...