JWT 개요 간단 정리

1. JWT(Json Web Token)란

JSON 객체를 사용해서 토큰 자체에 정보들을 저장하고 있는 Web Token 으로 가벼운 인증으로 사용이 쉽다. 일반적으로 클라이언트와 서버, 서비스와 서비스 사이 통신을 할 때 권한 인가(Authorization)을 위해서 사용된다.

2. 구조

  • Header : Signature를 해싱하기 위한 알고리즘 정보
1
2
3
4
{
"alg" : "HS256",
"typ" : "JWT"
}
  • Payload : 서버와 클라이언트가 주고받는, 시스템에서 실제로 사용될 정보에 대한 내용들
1
2
3
4
{
"name" : "jy",
"iat" : 1422779638
}
  • Signature : 토큰의 유효성 검증을 위한 문자열로 헤더와 페이로드를 합친 문자열을 서명한 값이다. 헤더의 alg에 정의된 알고리즘과 secret을 이용해 해싱하고 이 값을 다시 base64 인코딩하여 생성한다.
1
2
3
4
5
HMAC-SHA256(
secret,
base64urlEncoding(header) + '.' +
base64urlEncoding(payload)
)

이 세 부분은 각각 Base64 인코딩을 사용하여 점을 사용해서 연결되면 JWT가 완성되며 주로 HTTP 통신 시 Authorization key의 value 로 사용된다.

1
2
3
4
{
//Header Payload Signature
"Authorization": "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYW1lIjoiankiLCJpYXQiOjE0MjI3Nzk2Mzh9.SNKm-Pcut8DUMBmeQXdIJlM_wFkh4jYd5YtRT369JdI",
}

3. 장점과 단점

  • 장점

    • 중앙의 인증서버, 데이터 스토어에 대한 의존성이 없어서 시스템의 수평확장에 유리하다.
    • Base64 URL Safe Encoding을 사용하여 URL, Cookie, Header 어디에서든 모두 사용 가능하다.
  • 단점

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