진짜 개발자
본문 바로가기

Language/Java

Java - jjwt 사용법

728x90
jjwt 사용법

이번 포스팅에서는 jjwt를 사용하는 방법에 대해 알아보도록 하겠습니다. jwt에 대해서 잘 모르시는 분은 이전 포스팅(https://galid1.tistory.com/581)을 참고해주세요.

 

 

1. dependency 추가

우선 당연히 jwt를 사용하기 위해서는 dependency를 추가해야겠죠?

 

https://mvnrepository.com/artifact/io.jsonwebtoken/jjwt/0.9.0

maven repository에 검색하면 원하는 dependency를 찾을 수 있습니다.

 

저는 gradle을 사용하기 때문에 위와 같이 설정을 추가했습니다.

 

 

2. 사용법

사용법은 크게 2가지에 대해 알아볼 것입니다.

1. 토큰 생성

2. 토큰 파싱 및 검증

 

 

2.1 토큰 생성

우선 토큰을 생성 및 파싱하기 위해서는 token에 서명을 하기 위해 key값이 필요합니다. 테스트를 위해 간단히 "A"를 key값으로 정했습니다.

 

이전 포스팅에서 말씀드렸듯이 jwt토큰은 3부분으로 구성되어있습니다.(헤더, 내용, 서명)

 

Header(헤더)


우선,헤더의 경우에는 typ(토큰 타입), alg(알고리즘)이 포함되어야 합니다. Header의 경우에는 Map<String, Object>에 값을 넣어 주면 됩니다.

 

Payload(내용)


내용에는 원하는 데이터, 토큰 발급대상, 토큰 만료기간, 토근 수령자 등등 여러 내용이 담길 수 있습니다. 이전 포스팅을 참고해주세요. 여기서는 간단히 만료시간데이터만을 기입했습니다. 또한, payload의 경우에도 Header와 같이 Map<String, Object>를 이용해 데이터를 기입하면 됩니다.

 

Sign(서명)


서명의 경우에는 Jwts.builder()signWith() 메소드를 이용하면 됩니다. 첫번째 매개변수로는 해시 알고리즘, 두번째로는 앞서 정한 key의 byte를 입력해주면 됩니다.

 

마지막으로 토큰을 생성하기 위해서는 Jwts.builder().compact()를 호출하면 됩니다.

 

 

 

2.2 토큰 검증

토큰을 생성했다면, 이것을 우리가 알아볼 수 있고, 사용할 수 있는 형태로 변환하는 방법이 필요합니다.

 

우선 jwtToken은 위에서 보았듯이 String 형태로 생성이 됩니다. 우리는 이것을 우리가 사용하기 위한 형태로 parsing하기 위해서 Jwts.parse()를 이용해야합니다.

 

그 후 token을 생성할 때 사용했던 key를 set해주어야 합니다.(setSignKey("A".getBytes()))) 다음으로는 parseClaimsJws() 메소드를 이용해 토큰을 Jws로 파싱합니다.

 

마지막으로 getBody()를 이용해 앞서 토큰에 저장했던 data들이 담긴 claims를 얻어올 수 있습니다.



JUnit Test 통과후, 실제 테스트시 에러(JWT signature does not match locally computed signature)

랜덤키를 발급하여 ~~ 하는데 ~~

https://stackoverflow.com/questions/42397484/jwt-signature-does-not-match-locally-computed-signature/42400145