Jwt добавляет требования к токену при загрузке Spring - PullRequest
0 голосов
/ 24 мая 2018

Привет! Я пытался использовать токены jwt при весенней загрузке, но столкнулся с проблемой добавления пользовательских утверждений в токен jwt.Я хочу добавить пользовательские утверждения, такие как эмитент, аудитория, exp, sub, ... user: {}, .. Как я могу добавить свой объект в разделы заголовка и полезной нагрузки

Ответы [ 2 ]

0 голосов
/ 26 июля 2018

Я решил это с помощью следующего кода:

@Bean
    public JwtAccessTokenConverter tokenEnhancer() {
        KeyStoreKeyFactory keyStoreKeyFactory = new KeyStoreKeyFactory(
                new ClassPathResource("jwt.jks"),
                keyStorePassword.toCharArray());
        // For getting user information in getPrincipal()
        DefaultUserAuthenticationConverter duac = new DefaultUserAuthenticationConverter();
        duac.setUserDetailsService(userDetailsService);
        DefaultAccessTokenConverter datc = new DefaultAccessTokenConverter();
        datc.setUserTokenConverter(duac);

        JwtAccessTokenConverter converter = new CustomAccessTokenConverter();
        converter.setAccessTokenConverter(datc); // IMPORTANT
        converter.setKeyPair(keyStoreKeyFactory.getKeyPair("jwt"));
        return converter;
    }
0 голосов
/ 24 мая 2018

Я предполагаю, что вы используете spring-security-oauth2.Я не получил часть How can I add my object into header and payload sections, но вы можете использовать TokenEnhancer , как упоминалось в этом уроке .Пример фрагмента из этого руководства приведен ниже:

public class CustomTokenEnhancer implements TokenEnhancer {
    @Override
    public OAuth2AccessToken enhance(
     OAuth2AccessToken accessToken, 
     OAuth2Authentication authentication) {
        Map<String, Object> additionalInfo = new HashMap<>();
        additionalInfo.put("organization", authentication.getName() + randomAlphabetic(4));
        ((DefaultOAuth2AccessToken) accessToken).setAdditionalInformation(additionalInfo);
        return accessToken;
    }
}

. Для получения дополнительной информации вы можете использовать AuthorizationServerTokenServices

tokenServices.getAccessToken(authentication).getAdditionalInformation();
.
...