(JWT)JSON WEB TOKEN

huihui·2021년 3월 18일
0

토큰 기반 인증 시스템이란

세션을 사용하는 서버 기반 인증 시스템과는 달리 토큰 기반 인증 시스템은 클라이언트가 서버에 접속을 하면 서버에서 해당 클라이언트에게 인증되었다는 의미로 '토큰'을 부여한다.
이 '토큰'을 갖고 있으면 다음에 클라이언트가 또 다시 서버에 요청을 보낼 때 헤더에 '토큰'을 심어서 보낸다.
그럼 서버에서는 클라이언트로부터 받은 '토큰'을 자기들이 준 '토큰'과 일치하는지 확인을 한다.

이러한 토큰 기반 인증 시스템은 서버에 클라이언트의 정보를 저장할 필요가 없어 서버의 부담이 줄어든다는 장점이 있다.

JWT

JWT는 토큰 기반 인증을 위해 사용하는 JSON WEB TOKEN의 약자이다.
주로 회원 인증 부분에서 많이 사용되는 개념이다.

아래는 토큰 기반 인증 시스템의 메커니즘이다.

JWT는 Header, Payload, Signature로 나뉘는데 각 JSON 형태로 이루어져 있다.

// Header 
{
 	"alg": "HS256"
  	"typ": "JWT"
}

// Payload
{
 	"sub": "어쩌구저쩌구",
    "jti": "어쩌구저쩌구", ...
}

Signature는 Header와 Payload를 각각 BASE64 방식으로 인코딩을 한 이후, private key를 이용해 알고리즘으로 해싱을 해야 한다. 어떤 알고리즘으로 해싱을 하는지 명시를 해주는 것이 바로 Header의 역할이다.

Payload

Payload는 '클레임'이라는 개념을 사용한다.
'클레임'들이 모여 토큰에서 사용하는 정보들을 이루어낸다.
클레임의 종류는 총 세 가지로 등록된 클레임, 공개 클레임, 비공개 클레임이 있다.
자세한 부분은 따로 포스팅을 하도록 하자.

Signature

Signature는 서명이라고 하는데, 고유한 코드라고 생각하면 된다.
Header 부분에서 언급한 것처럼 Signature는 Header, Payload를 BASE64 방식으로 인코딩하고 이 값을 Header에서 정의한 알고리즘으로 해싱을 한 이후 다시 BASE64로 인코딩을 하면 생성이 된다.

이렇게 생성된 Header, Payload, Signature는 '.'을 구분하여 이어주면 JWT 토큰이 완성된다.


빨간색(Header), 보라색(Payload), 하늘색(Signature)

참고

https://elfinlas.github.io/2018/08/12/whatisjwt-01/
https://kaonsoft.tistory.com/6

0개의 댓글