JWT: почему я получаю новый токен после очистки локального хранилища? - PullRequest
0 голосов
/ 04 декабря 2018

У меня есть приложение Angular 7 с пружинным API.Я использую Spring Security, токены JWT и https://github.com/manfredsteyer/angular-oauth2-oidc для обработки входа в систему.

Я могу войти в систему, но когда я выхожу из системы и нажимаю еще раз, я сразу же получаю новый токен,без необходимости подключения.Я новичок в весенней безопасности и токенах JWT, но, насколько я знаю, я не могу правильно выйти из системы сзади, классический способ - удалить токен спереди.Это то, что делает библиотека, и, конечно, я попытался очистить вручную localStorage (где хранится токен), но даже с очищенным localStorage, когда я пытаюсь войти в систему, я сразу получаю новый токен.

AnyИдея о том, что происходит и как я могу выйти из системы?

Конфигурация сервера авторизации:

@Configuration
@EnableAuthorizationServer
public class OAuth2AuthorizationServerConfigJwt extends AuthorizationServerConfigurerAdapter {

    @Override
    public void configure(final ClientDetailsServiceConfigurer clients) throws Exception {
        clients.inMemory().withClient("sampleClientId")
        .authorizedGrantTypes("implicit")
        .scopes("read", "write", "foo", "bar")
        .autoApprove(true)/*.accessTokenValiditySeconds(3600)*/
        .redirectUris("http://localhost:4200");
    }

    @Override
    public void configure(final AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
        final TokenEnhancerChain tokenEnhancerChain = new TokenEnhancerChain();
        tokenEnhancerChain.setTokenEnhancers(Arrays.asList(tokenEnhancer(), accessTokenConverter()));
        endpoints.tokenStore(tokenStore()).tokenEnhancer(tokenEnhancerChain);
    }

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


    @Bean
    public JwtAccessTokenConverter accessTokenConverter() {
        final JwtAccessTokenConverter converter = new JwtAccessTokenConverter();
        converter.setSigningKey("123");
        return converter;
    }

    @Bean
    public TokenEnhancer tokenEnhancer() {
        return new CustomTokenEnhancer();
    }
}

Редактировать:

Похоже, это было связано сотсутствие

.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)

Но теперь, когда я добавил его, я застрял в форме входа в систему, кажется, что все еще чего-то не хватает.Вот мой конфиг:

@Override
    protected void configure(final HttpSecurity http) throws Exception {
        http.csrf().disable()
        .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
        .and()
        .authorizeRequests()
        .antMatchers("/login").permitAll()
        .antMatchers("/user").permitAll()
        .antMatchers("/registrationConfirm").permitAll()
        .antMatchers("/user/confirm/**").permitAll()
        .antMatchers("/user/registration/**").permitAll()
        .antMatchers("/oauth/token/revokeById/**").permitAll()
        .antMatchers("/tokens/**").permitAll()
        .anyRequest().authenticated()
        .and().formLogin().permitAll();
    }
...