JWT 생성
Base64 형식으로 인코딩
public class JwtTokenizer {
public String encodeBase64SecretKey(String SecretKey) {
return Encodes.Base64.encode(secretKey.getByte(StandardCharsets.UTF_8);
}
- PlainText 인 비밀키를 Base64 형식으로 인코딩
JWT 생성 메서드
AccessToken
public String generateAccessToken(Map<Stiring, Object> claimes,
String subject,
Date expiration
String base64EncodedSecretKey) {
Key key = getKeyFromBase64EncodedKey(base64EncodedSecretKey);
return Jwts.builder()
.setClaims(claims)
.setSubject(subject)
.setIssuedAt(Calendar.getInstance().getTime())
.setExpiration(expiration)
.signWith(key)
.compact();
}
RefreshToken
public Stirng generateRefreshToken(String subject,
Date expiration,
String base64EncodedSecretKey) {
Key key = getKeyFromBase64EncodedKey(baes64EncodedSecretKey);
return Jwts.bulider()
.setSubject(subject)
.setIssueAt(Calendar.getInstance().getTime())
.setExpiration(expiration)
.signWith(key)
.compact();
}
RefreshToken
의 경우 AccessToken
이 만료했을때 재 발행 하기 위해 존재하는 토큰이므로 claim을 추가할 필요가 없다.
JWT 서명에 사용할 SecretKey 생성 메서드
private Key getKeyFromBase64EncodedKey(String base64EncodedSecretKey) {
byte[] keyBytes = Decoders.BASE64.decode(base64EncodedSecretKey;
Key key = Keys.hmacShaKeyFor(keyBytes);
}