인증과 인가 (5) : JWT 다루기 (수정중)

이민호·2024년 5월 28일
0

직전 포스팅에 이어서 JWT를 활용하는 코드를 리뷰하는 포스팅

JWTutil

JWT를 다루기 위해 그와 관련된 기능-메서드들을 모아 정리하는 클래스

필요한 기능들

  • 생성
  • 쿠키에 저장
  • 쿠키의 JWT를 Substring -> 검증을 위해서
  • 검증
  • 정보 추출
// Header KEY 값
public static final String AUTHORIZATION_HEADER = "Authorization";
// 사용자 권한 값의 KEY
public static final String AUTHORIZATION_KEY = "auth";
// Token 식별자
public static final String BEARER_PREFIX = "Bearer ";
// 토큰 만료시간
private final long TOKEN_TIME = 60 * 60 * 1000L; // 60분

@Value("${jwt.secret.key}") // Base64 Encode 한 SecretKey
private String secretKey;
private Key key;
private final SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS256;

// 로그 설정
public static final Logger logger = LoggerFactory.getLogger("JWT 관련 로그");

@PostConstruct
public void init() {
    byte[] bytes = Base64.getDecoder().decode(secretKey);
    key = Keys.hmacShaKeyFor(bytes);
}
  • Base64로 Encode된 Secret Key를 properties에 작성해두고 @Value를 통해 가져옵니다.
  • JWT를 생성할 때 가져온 Secret Key로 암호화합니다.
    • 이때 Encode된 Secret Key를 Decode 해서 사용합니다.
    • Key는 Decode된 Secret Key를 담는 객체입니다.
    • @PostConstruct는 딱 한 번만 받아오면 되는 값을 사용 할 때마다 요청을 새로 호출하는 실수를 방지하기 위해 사용됩니다.
      • JwtUtil 클래스의 생성자 호출 이후에 실행되어 Key 필드에 값을 주입 해줍니다.
  • 암호화 알고리즘은 HS256 알고리즘을 사용합니다.
  • Bearer 란 JWT 혹은 OAuth에 대한 토큰을 사용한다는 표시입니다.
  • 로깅이란 애플리케이션이 동작하는 동안 프로젝트의 상태나 동작 정보를 시간순으로 기록하는 것을 의미합니다.
profile
둘뺌

0개의 댓글