При переопределении метода расширения JwtAccessTokenConverter невозможно преобразовать токен доступа в JSON при обновлении токена. - PullRequest
0 голосов
/ 07 сентября 2018

Проблема возникает, когда я использую super.enhance (token, auth) в операторе return при переопределении метода Enhancement () JwtAccessTokenConverter.Работает нормально, только когда возвращаю токен.Но дополнительная информация отображается только в теле ответа службы / oauth / token, а не в полезной нагрузке JWT.

И когда я возвращаю super.enhance (токен, аутентификация), дополнительная информация добавляется в полезную нагрузку JWT (Я проверил на jwt.io).Но теперь токен не разбирается.

@Override
public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
 TokenEnhancerChain enhancerChain = new TokenEnhancerChain();
 enhancerChain.setTokenEnhancers(Arrays.asList(accessTokenConverter(), xyAuthTokenEnhancer2));
 endpoints
   .tokenStore(tokenStore())
   .accessTokenConverter(accessTokenConverter())
   .authenticationManager(this.authenticationManager)
   .userDetailsService(userDetailsService);
}

Я пытаюсь расширить токен доступа следующим образом:

@Configuration
@Component
public class CustomJwtConverter extends JwtAccessTokenConverter {
   @Override
   public OAuth2AccessToken enhance(OAuth2AccessToken accessToken, OAuth2Authentication authentication) {
     Map<String, Object> additionalInfo = new HashMap<>();
     XYUser user = (XYUser) authentication.getPrincipal();
     additionalInfo.put("userId", user.getUserId());
     additionalInfo.put("firstName", user.getFirstName());
     additionalInfo.put("lastName", user.getLastName());
     additionalInfo.put("companyId", user.getCompanyId());
     ((DefaultOAuth2AccessToken) accessToken).setAdditionalInformation(additionalInfo);
     return super.enhance(accessToken, authentication);
   }
}

Итак, помогите, пожалуйста.почему токен не разбирается после улучшения и как это исправить?и я следовал этому руководству: Spring Cloud Security с OAuth2

1 Ответ

0 голосов
/ 08 сентября 2018

Я думаю, что вы допустили ошибку в методе настройки. Вы пропустили EnhancerChain в объекте конечных точек Мой пример работает нормально со следующим методом конфигурации.

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