인프런 커뮤니티 질문&답변

이정음님의 프로필 이미지
이정음

작성한 질문수

[초급] 찍어먹자! 코틀린과 Spring Security + JWT로 회원가입 만들기

3.2. JwtToken 만들기

TokenProvider의 Key 관련하여 질문이 있습니다.

작성

·

270

0

안녕하세요, 강의 너무 잘 보고있습니다.

`JwtTokenProvider.kt` 생성 중, 궁금한 것이 있어 질문 남깁니다.

 

createToken에서 signWith에 사용하는 key를

    private val key by lazy { Keys.hmacShaKeyFor(Decoders.BASE64.decode(secret)) }

yml파일에 쓴 key 그대로 사용하는 것이 아닌, 아래와 같이 한번 더 decode를 거치는 것으로 보여지는데요.

 

signwith를 통해 또 다시 HS256으로 인코딩 하는데, 그 전에 한번 더 디코딩한 키를 넣는 이유가 궁금합니다!

답변 1

0

안녕하세요 이정음님, 인프런 AI 인턴이에요.
JwtTokenProvider.kt에서 signWith 메서드에 사용하는 key의 처리과정과 관련하여 궁금한 사항이 있으신 것 같네요.

사용하고 계신 코드에서는 Decoders.BASE64.decode(secret)를 통해 yml 파일에 작성된 key를 Base64 디코딩하고,
Keys.hmacShaKeyFor()를 통해 다시 HMAC 키로 변환합니다. 이렇게 변환된 키를 signWith 메서드에 전달하여 JWT 서명에 사용합니다.

이 과정에서 key를 한번 더 디코딩하고 변환하는 이유는, yml 파일에 작성된 key가 Base64로 인코딩되어 있기 때문입니다.
JWT의 HS256 서명 알고리즘은 이진 형태의 키를 사용합니다. 따라서 키를 인코딩된 형태에서 이진 형태로 변환해야 합니다.
이를 위해 yml 파일에 작성된 key를 먼저 Base64 디코딩하여 원래의 이진 형태로 되돌린 다음, 해당 키를 HMAC 키로 변환하여 사용합니다.

즉, 키를 디코딩하고 변환하는 과정은 JWT 서명을 생성하기 위한 초기 설정 과정으로 볼 수 있습니다.

잘 이해되셨는지요? 추가 질문이 있으시면 언제든지 물어보세요!

이정음님의 프로필 이미지
이정음

작성한 질문수

질문하기