본문 바로가기

STUDY/Spring

Spring Boot | Spring Security OAuth2 (7) 토큰과 함께 다른 정보 응답

/oauth/token URI에 토큰값을 요청할 때 다른 데이터를 추가해서 응답을 받고자 한다.

1. CustomJwtTokenConverter 작성

JwtAccessTokenConverter를 상속받아 token을 발급할 때 다른 정보들을 추가한다.

/* /oauth/token URI response에 토큰 발급과 함께 다른 정보들을 보낼 수 있게 함 */
public class CustomJwtTokenConverter extends JwtAccessTokenConverter {

    @Override
    public OAuth2AccessToken enhance(OAuth2AccessToken accessToken, OAuth2Authentication authentication) {

        Map<String, Object> claims = new LinkedHashMap<String, Object>(
                accessToken.getAdditionalInformation());
        claims.put("key", "value");

        DefaultOAuth2AccessToken customAccessToken = new DefaultOAuth2AccessToken(accessToken);
        customAccessToken.setAdditionalInformation(claims);
        
        return super.enhance(customAccessToken, authentication);
        
    }

}

 

2. OAuth2AuthoriztionConifg 수정

위에서 작성한 CustomJwtTokenconverter를 사용한다.

    @Bean
    public JwtAccessTokenConverter jwtAccessTokenConverter() {
        CustomJwtTokenConverter customJwtTokenConverter = new CustomJwtTokenConverter();
        KeyStoreKeyFactory keyStoreKeyFactory
                = new KeyStoreKeyFactory(new ClassPathResource("oauth2jwt.jks"), "oauth2jwtpass606".toCharArray());
        customJwtTokenConverter.setKeyPair(keyStoreKeyFactory.getKeyPair("oauth2jwt"));
        return customJwtTokenConverter;
    }

 

그리고 tokenstore와 conigure에도 등록!

    /* OAuth2 서버가 작동하기 위한 EndPoint에 대한 정보 설정 */
    @Override
    public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
        endpoints.tokenStore(tokenStore())
                .authenticationManager(authenticationManager)
                .accessTokenConverter(jwtAccessTokenConverter())
                .userDetailsService(customUserDetailService);
    }

    /* token store로 JWTTokenStore를 사용하겠다 */
    @Bean
    public TokenStore tokenStore() {
        return new JwtTokenStore(jwtAccessTokenConverter());
    }

 

3. 테스트

/oauth/token URI로 토큰 발급 요청을 해보면 다른 값이 함께 온 것을 확인 할 수 있다.