정의
- Json Web Token의 줄임말.
- json 객체를 사용해서 토큰 자체에 정보를 저장하고 있는 web token
- 통신 양자간의 정보를 JSON 형식을 사용하여 안전하게 전송하는 방식
- 정보가 토큰 자체에 포함된(Self-Contained) 클레임 (Claim)기반 토큰
구성
.
을 기준으로 header, payload, signature로 구성됨
헤더
{
"alg": "HS256",
"typ": "JWT"
}
페이로드
- 서버와 클라이언트가 주고받는 데이터(시스템에서 사용될 정보)
{
"email": "sample@domain.com",
"profile": "http://domain.com/image.png",
"http://domain.com/xxx/yyy/is_admin": true
}
시그니처
- 토큰의 유효성 검증을 위한 문자열
- 특정 암호화 알고리즘을 사용하여, Base64 인코딩된 헤더와 Base64 인코딩된 페이로드 그리고 비밀키(secret key)를 이용하여 암호화한다.
- 서명을 통해 서버는 헤더 혹은 페이로드가 변조되었는지(무결성) 여부를 검증하고 보장할 수 있다.
KeefPR1ixDwoNnBQ77YsBYQxXFkZR1VcAkah6yle5lk
HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
secret)
특징
- 세션과 달리 사용자 정보를 db에 저장하지 않고 토큰에 저장
- 세션과 달리 사용자 정보를 서버가 아닌 클라이언트가 가짐
- 해시 혹은 비대칭키 방식을 사용하여 서명 (Signature) 하기 때문에 무결성 검증이 가능
- 토큰 자신이 정보를 직접 포함하고 있어 통신 양자간 정보를 안전하게 전송할 수 있음
장점
- 중앙의 인증 서버, 데이터 스토어에 대한 의존성 없음
- 시스템 수평 확장 유리
- BASE64 URL Safe Encoding-> URL, Cookie, Header 모두 사용 가능
단점
- payload가 많아지면 네트워크 사용량 증가, 때문에 데이터 설계 고려 필요
- 서버에서는 JWT 가 만료될 때 까지 아무런 조치도 취할 수 없음
즉, 이미 발행된 토큰에 대해 서버는 어떤 제어도 불가능
Reference