키를 직접 발급해 키값으로 jwt를 해석 하는 방법으로 바꿔보기
1. KeyStore 생성
java에서 keytool이라는 KeyStore생성 툴을 제공하기 때문에 이것을 이용해 키를 발급한다.
$ keytool -genkeypair -alias [키 별칭] -keyalg RSA -keypass [키 암호] -keystore [저장될 파일명] -storepass [파일의 암호]
그리고 public key값을 확인
$ keytool -list -rfc --keystore [저장 파일명] | openssl x509 -inform pem -pubkey
----BEGIN PUBLIC KEY----부분부터 ----END PUBLIC KEY----부분까지 복사
2. KeyStore등록
우선 AuthenticationServer의 resources폴더 하위에 위에서 생성한 키 파일을 붙여 넣기
JwtAccessTokenConverter에 키 파일을 설정
/* JWT 디코딩 하기 위한 설정 */
@Bean
public JwtAccessTokenConverter jwtAccessTokenConverter() {
JwtAccessTokenConverter jwtAccessTokenConverter = new JwtAccessTokenConverter();
KeyStoreKeyFactory keyStoreKeyFactory
= new KeyStoreKeyFactory(new ClassPathResource("oauth2jwt.jks"), "비밀번호".toCharArray());
jwtAccessTokenConverter.setKeyPair(keyStoreKeyFactory.getKeyPair("oauth2jwt"));
return jwtAccessTokenConverter;
}
그리고 ResourceServer의 resources폴더 하위에 텍스트 파일을 생성한 뒤 위에서 복사한 public key를 붙여넣기
ResourceServer의 JwtAccessTokenConverter에도 키를 등록해준다!
IOUtils.toString이 안 되면 commons-io 디펜던시를 추가하면 됨
/* JWT 디코딩 하기 위한 설정 */
@Bean
public JwtAccessTokenConverter jwtAccessTokenConverter() {
JwtAccessTokenConverter jwtAccessTokenConverter = new JwtAccessTokenConverter();
Resource resource = new ClassPathResource("publicKey.txt");
String publicKey = null;
try{
publicKey = IOUtils.toString((resource.getInputStream()));
} catch (final IOException e){
throw new RuntimeException(e);
}
jwtAccessTokenConverter.setVerifierKey(publicKey);
return jwtAccessTokenConverter;
}
3. 테스트
테스트 방식은 이전과 동일하다...
access token발급 후 api에 access token값을 보내면서 요청했을 때 정상적으로 수행되면 성공
+) 참고
'STUDY > Spring' 카테고리의 다른 글
Spring Boot | Spring Security 한 유저에게 여러 Authority(ROLE) 부여하기 (UserDetails) (0) | 2021.03.15 |
---|---|
Spring Boot | Spring Security OAuth2 (7) 토큰과 함께 다른 정보 응답 (0) | 2021.03.12 |
Spring Boot | Spring Security OAuth2 (5) 서버 나누기 (Multi Module) (0) | 2021.03.10 |
Spring Boot | 멀티 모듈 프로젝트 (Multi Module) (0) | 2021.03.10 |
Spring Boot | Spring Security OAuth2 (4) JWT TokenStore (0) | 2021.03.09 |