JWT

준우·2023년 5월 25일
1

Spring Boot

목록 보기
8/8

정의

  • 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

0개의 댓글