본문 바로가기

개발론

JWT 생성은 개인키로 / 검증은 공개키로

[

RS256 RSA + SHA256 줄임말로 대칭키방식인 HS256 달리 공개키를 이용하는 대표적인 암호화방식인 RSA 사용한것이다.

메세지를 SHA256 알고리즘으로 해싱 한뒤 private key 암호화(서명)한다. public key 발급받은 어떠한 주체는 앞서 암호화(서명) 해싱값을 복호화 또는 서명을 검증하는 할수 있는 방식이다.

public key는 이름 그대로 보안을 유지할 필요가 없기 때문에 ID 공급자는 이 public key를 메타 데이터 URL을 통해 쉽게 구할 수 있도록 제공한다.

 

Signature

점(.)을 구분자로 해서 헤더와 페이로드를 합친 문자열을 서명한 값이다. 서명은 헤더의 alg에 정의된 알고리즘과 비밀 키를 이용해 성성하고 Base64 URL-Safe로 인코딩한다.

Base64URLSafe(Sign('ES256', '${PRIVATE_KEY}',
'eyJhbGciOiJFUzI1NiIsImtpZCI6IktleSBJRCJ9.eyJpYXQiOjE1ODYzNjQzMjcsImlzcyI6ImppbmhvLnNoaW4ifQ'))) ->
MEQCIBSOVBBsCeZ_8vHulOvspJVFU3GADhyCHyzMiBFVyS3qAiB7Tm_MEXi2kLusOBpanIrcs2NVq24uuVDgH71M_fIQGg

JWT

점을 구분자로 해서 헤더, 페이로드, 서명을 합치면 JWT가 완성된다.

eyJhbGciOiJFUzI1NiIsImtpZCI6IktleSBJRCJ9.eyJpYXQiOjE1ODYzNjQzMjcsImlzcyI6ImppbmhvLn
NoaW4ifQ.eyJhbGciOiJFUzI1NiIsImtpZCI6IktleSBJRC9.eyJpYXQiOjE1ODYzNjQzMjcsImlzcyI6Imp
pbmhvLnNoaW4ifQ.MEQCIBSOVBBsCeZ_8vHulOvspJVFU3GADhyCHyzMiBFVyS3qAiB7Tm_ME
Xi2kLusOBpanIrcs2NVq24uuVDgH71M_fIQGg

이렇게 완성된 JWT는 헤더의 alg, kid 속성과 공개 키를 이용해 검증할 수 있다. 서명 검증이 성공하면 JWT의 모든 내용을 신뢰할 수 있게되고, 페이로드의 값으로 접근 제어나 원하는 처리를 할 수 있게된다.

'개발론' 카테고리의 다른 글

구글 리프레시 토큰이 안넘어 오는 이유!  (0) 2022.05.19
엘라스틱 서치에 대해서  (0) 2022.05.03
커넥션풀이 뭘까 그리고 왜 사용할까  (0) 2022.03.03
MSA 에 대해서  (0) 2021.03.15
CS스터디 - 3월1주차  (0) 2021.03.03