/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로 토큰 발급 요청을 해보면 다른 값이 함께 온 것을 확인 할 수 있다.
'STUDY > Spring' 카테고리의 다른 글
Spring Boot | spring-boot-starter-validation (2) | 2021.03.16 |
---|---|
Spring Boot | Spring Security 한 유저에게 여러 Authority(ROLE) 부여하기 (UserDetails) (0) | 2021.03.15 |
Spring Boot | Spring Security OAuth2 (6) JWT KeyPair (0) | 2021.03.11 |
Spring Boot | Spring Security OAuth2 (5) 서버 나누기 (Multi Module) (0) | 2021.03.10 |
Spring Boot | 멀티 모듈 프로젝트 (Multi Module) (0) | 2021.03.10 |