Spring Security - JWT 생성

uudean·2023년 7월 13일
0

Spring

목록 보기
12/13

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)  // CustomClaim JWT에 추가
               .setSubject(subject) // JWT 제목
               .setIssuedAt(Calendar.getInstance().getTime()) // 발행일자
               .setExpiration(expiration) // 만료일자
               .signWith(key) // 서명을 위한 객체 생성
               .compact(); // JWT 생성 및 직렬화
}               
RefreshToken
public Stirng generateRefreshToken(String subject,
								   Date expiration,
                               	   String base64EncodedSecretKey) {
	Key key = getKeyFromBase64EncodedKey(baes64EncodedSecretKey);
    
    return Jwts.bulider()
    		   .setSubject(subject) // JWT 제목
               .setIssueAt(Calendar.getInstance().getTime()) // 발행일자
               .setExpiration(expiration) // 만료일자
               .signWith(key) // 서명을 위한 객체 생성
               .compact(); // JWT 생성 및 직렬화
}
  • RefreshToken 의 경우 AccessToken 이 만료했을때 재 발행 하기 위해 존재하는 토큰이므로 claim을 추가할 필요가 없다.
JWT 서명에 사용할 SecretKey 생성 메서드
private Key getKeyFromBase64EncodedKey(String base64EncodedSecretKey) {
// Base 64 형식으로 인코딩된 baseEncodedSecretKey를 디코딩 후 byteArray 를 반환
	byte[] keyBytes = Decoders.BASE64.decode(base64EncodedSecretKey; 
// 적절한 HAMC 알고리즘을 이용하여 Key 객체 생성
    Key key = Keys.hmacShaKeyFor(keyBytes);
}

0개의 댓글

관련 채용 정보