JWT Access Token не генерирует на каждом токене авторизацию вызовов - PullRequest
0 голосов
/ 04 декабря 2018

Я настроил свой проект авторизации Oauth2 с JWT.Когда я авторизуюсь, используя учетные данные клиента, я получаю токен доступа, как показано ниже.Время истечения - 43199

{
"access_token":"eyJhbGci........................",
"token_type": "bearer",
"expires_in": 43199,
"scope": "resource-access",
"jti": "45507f3e-2d8c-4dc8-95ce-295bb690cf3a"
}

Я не храню токены нигде, например, в БД, сеансе и т. Д., Однако, если я вызываю ту же конечную точку токена авторизации, я получаю тот же токен доступа с уменьшениемвремя истечения.

Не уверен, где хранится этот токен, я ожидаю, что получу новый токен каждый раз, когда я вызываю конечную точку авторизации токена.

Может кто-нибудь помочь мне с этим

Мой пользовательский AuthorizationServerConfigurerAdapter класс указан ниже

@Configuration
@EnableAuthorizationServer
public class AuthorizationServerConfig extends AuthorizationServerConfigurerAdapter {

    @Value("${scopes}")
    private Boolean checkUserScopes;

    @Autowired
    private DataSource dataSource;

    @Autowired
    private PasswordEncoder passwordEncoder;

    @Autowired
    private UserDetailsService userDetailsService;

    @Autowired
    private ClientDetailsService clientDetailsService;

    @Autowired
    @Qualifier("authenticationManagerBean")
    private AuthenticationManager authenticationManager;

    @Bean
    public OAuth2RequestFactory requestFactory() {
        CustomOauth2RequestFactory requestFactory = new CustomOauth2RequestFactory(clientDetailsService);
        requestFactory.setCheckUserScopes(true);
        return requestFactory;
    }

    @Override
    public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
        clients.jdbc(dataSource).passwordEncoder(passwordEncoder);
    }

    @Bean
    public TokenEndpointAuthenticationFilter tokenEndpointAuthenticationFilter() {
        return new TokenEndpointAuthenticationFilter(authenticationManager, requestFactory());
    }

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

    @Override
    public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
        endpoints
        .tokenEnhancer(jwtAccessTokenConverter())
        .authenticationManager(authenticationManager)
        .userDetailsService(userDetailsService);
        if (checkUserScopes) {
            endpoints.requestFactory(requestFactory());
        }
    }

    @Bean
    public JwtAccessTokenConverter jwtAccessTokenConverter() {
        CustomJwtTokenEnhancerConfig tokenEnhancer = new CustomJwtTokenEnhancerConfig();
        tokenEnhancer.setKeyPair(new KeyStoreKeyFactory(new ClassPathResource("myjwt.jks"), "password".toCharArray()).getKeyPair("jwt"));
        return tokenEnhancer;
    }
}

1 Ответ

0 голосов
/ 24 января 2019

Метод аутентификации JSON Web Token (JWT) не требует таблиц базы данных или хранилищ данных для хранения сгенерированного токена.Токен генерируется с использованием алгоритмов шифрования.

Когда вы вызываете службу входа в систему, токен генерируется с использованием полезной нагрузки и секретного значения.Если ваша полезная нагрузка такая же, вы не получите новое значение токена с тем же секретным значением.

Вы можете обратиться по этой ссылке, чтобы узнать немного больше о том, как работает JWT.https://medium.com/vandium-software/5-easy-steps-to-understanding-json-web-tokens-jwt-1164c0adfcec

...