Настройка Spring Boot Security для использования JWT в качестве токена доступа и обычного токена для токена обновления? - PullRequest
0 голосов
/ 13 февраля 2019

Пока у меня есть это:

@Configuration
@EnableAuthorizationServer
public class AuthServerConfig extends AuthorizationServerConfigurerAdapter {

    @Autowired
    private AuthenticationManager authenticationManager;

    @Autowired
    private ClientService clientService;

    @Autowired
    private UserService userService;

    @Value( "${spring.security.oauth2.jwt.keystore.password}" )
    private String keyStorePassword;

    @Value( "${spring.security.oauth2.jwt.keystore.alias}" )
    private String keyStoreAlias;

    @Value( "${spring.security.oauth2.jwt.keystore.filename}" )
    private String keyStoreFilename;

    @Override
    public void configure(AuthorizationServerSecurityConfigurer oauthServer) throws Exception {
        oauthServer.tokenKeyAccess("permitAll()").checkTokenAccess("isAuthenticated()");
    }

    @Override
    public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
        clients.withClientDetails(clientService);
    }

    @Override
    public void configure(AuthorizationServerEndpointsConfigurer configurer) throws Exception {
        configurer
                .tokenStore(tokenStore())
                .accessTokenConverter(accessTokenConverter())
                .authenticationManager(authenticationManager).userDetailsService(userService);
    }

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

    @Bean
    public JwtAccessTokenConverter accessTokenConverter() {
        JwtAccessTokenConverter converter = new JwtAccessTokenConverter();
        KeyStoreKeyFactory keyStoreKeyFactory =
                new KeyStoreKeyFactory(new ClassPathResource(keyStoreFilename), keyStorePassword.toCharArray());
        converter.setKeyPair(keyStoreKeyFactory.getKeyPair(keyStoreAlias));
        return converter;
    }

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

Это работает отлично и позволяет мне аутентифицировать запросы с токеном JWT, но полезная нагрузка, которую я получаю от clientcredentialgrant или passwordgrant, не только изменяет access_token на JWT,но также токен обновления.Есть ли способ, чтобы токен доступа был JWT, но не токен обновления?

Спасибо, Крис

...