Post

(JWT)JWT

⁉️ JWT란?

  • RFC7519 웹 표준으로 지정
  • JSON 객체를 사용해서 토큰 자체에 정보들을 저장하고 있는 Web Token이다.

🔍 JWT의 구성

  • Signature를 해싱하기 위한 알고리즘 정보가 담겨있다.
1
2
3
4
{
	"alg" : "HS256",
	"typ" : "JWT"
}
  • alg: 서명 알고리즘 작성
  • typ: 토큰 타입을 명시

Payload

  • 서버와 클라이언트가 주고받는, 시스템에서 실제로 사용될 정보에 대한 내용들을 담고있다.
1
2
3
4
5
{
	"sub" : "1234567890",
	"name" : "John Doe",
	"admin" : true
}
  • 토큰에 담겨져 있는 데이터를 클레임이라고 한다.
클레임타인수락률
iss(issuer)JWT를 발행하는 주체를 나타냄
sub(subject)JWT의 주제를 나타냄
aud(audience)JWT발급의 대상자를 나타냄
exp(expiration time)JWT의 만료 날짜/시간을 나타냄
nbf(not before)JWT사용 시작 날짜/시간을 나타냄
iat(issued at)JWT가 발행된 날짜/시간을 나타냄
jti(JWT id)JWT에 대한 고유 식별자로, JWT 복사 방지

Signatuer

  • 토큰의 유효성 검증을 위한 문자열
  • 문자열을 통해 해당 토큰이 유효한 토큰인지를 검증한다.
1
2
3
4
5
HMACSHA256(
	base64UrlEncode(header) + "." +,
	base64UrlEncode(payload),
	Secretkey
)

👀 JWT의 장단점

JWT의 장점

  • 중앙의 인증서버, 데이터 스토어에 대한 의존성이 없어, 시스템을 수평적으로 확장하는데 유리하다.
  • 사용이 쉽고, 간단하여 사이드 프로젝트에서 사용하기 좋다.
  • Base64 URL Safe Encoding > URL, Cookie, Header 모두 사용 가능

JWT의 단점

  • Payload의 정보가 많아지면 네트워크 사용량이 증가(트래픽⬆️ ), 데이터의 설계 고려가 필요하다.
  • 토큰이 클라이언트에 저장, 서버에서 클라이언트의 토큰을 조작할 수 없다.

🚫 세션과 토큰

세션

  • 세션 기반 인증의 기본적인 프로세스

세션 기반 인증

  • 서버 측에 클라이언트의 접속 상태를 저장

토큰

  • 토큰 기반 인증의 기본적인 프로세스

Untitled-2022-03-08-1100

  • 비밀키 또는 공개(개인) 키를 이용해 서명한 토큰을 클라이언트에 전달
  • 데이터 요청 시 클라이언트는 토큰을 포함한 상태로 요청을 진행
  • 서버는 토큰의 서명 값을 이용해 유효한 토큰인지 검증

세션과 토큰의 차이점

  • 정보 포함: 세션 값 자체에는 정보가 포함되어 있지 않다. 하지만, 토큰값에는 정보가 포함되어있다.
  • 상태 정보 미저장: 세션 방식은 상태 정보를 서버 내에 저장. 하지만, 토큰은 서버에 클라이언트의 상태를 저장하지 않는 무상태성 방식
  • 토큰에는 세션값에 없는 정보를 함께 포함하기 때문에 길이가 길다. -> 정보가 너무 많으면 네트워크 사용량이 증가될 수 있다.
  • 토큰 방식을 사용 시 서버에 정보를 저장할 필요가 없다. -> 서버의 확장에 유리하다.

📌 REFERENCE

Jwt.io

This post is licensed under CC BY 4.0 by the author.