JWT 개념

dasd412·2022년 3월 15일
0

JWT

목록 보기
1/9

구조

헤더.페이로드.시그니쳐 부분으로 나뉜다.

헤더는 어떤 암호화 알고리즘을 사용할 것인지, 페이로드는 JSON에 담길 정보, 시그니쳐는 전자서명을 나타내는 부분이다.

전자 서명의 경우, 헤더+페이로드+서버에 담긴 시크릿 키로 합쳐 암호화된다.

과정

  1. 클라이언트가 헤더, 페이로드, 시그니쳐 모두를 Base64로 암호화한다. (Base64는 복호화하기 쉽기 때문에 암호화 자체가 목적이 아니다. 누구로부터 왔는지를 인증하는 ‘전자 서명’이 목적이다.)
  2. 이 셋을 합쳐 jwt를 만들고 브라우저 내의 로컬 스토리지 등에 보관해놓는다.
  3. 서버에 개인 정보를 요청할 경우, 해당 jwt를 서버에 보낸다.
  4. 서버가 jwt 토큰을 받으면 인증을 시작한다. 먼저 헤더, 페이로드, 시그니쳐 모두 Base64로 복호화한다.
  5. 서버는 헤더에 적힌 암호화 알고리즘대로 헤더+페이로드+시크릿키를 합쳐 암호화해본다. 받은 JWT 토큰의 전자서명과 값이 같다면 인증된 것이다.
  6. 서버는 인증된 클라이언트에게 개인정보를 보낸다.

사용 이유

당사자 간에 정보를 교환할 때 JSON을 이용하여 정보를 전송하는 방식이다. 누구로부터 정보가 왔는지를 알려주는 ‘전자 서명’이 주된 목적이다.

그리고 JWT는 세션과 독립적으로 이용된다. 따라서 로드 밸런싱에 의해 서버들이 여러 개 나뉠지라도, 모든 서버에 ‘시크릿 키’가 동일하게 존재한다면 JWT 인증 방식에 의해 동일한 사용자임을 알 수 있다. 따라서 트래픽 등이 넘칠 경우 사용자가 또 로그인을 해야하는 불쾌함이 없어진다.

profile
시스템 아키텍쳐 설계에 관심이 많은 백엔드 개발자입니다. (Go/Python/MSA/graphql/Spring)

0개의 댓글