JWT

초콜렛빵·2023년 9월 8일
0

TIL

목록 보기
25/27

JWT

JWT 란?

  • JWT(Json Web Token)는 웹에서 사용되는 JSON 형태의 토큰을 의미하는 표준 규격
  • 주 사용 목적은 인증(Authentication) 또는 인가(Authorization) 정보를 서버와 클라이언트가 주고받을 때 사용
  • Authorization HTTP 헤더에 Bearer 의 형태로 클라이언트에서 서버로 전송하고, 토큰에 포함된 서명을 통해 서버에서는 위변조 여부 검증
  • Base64로 인코딩된 형태

구조

  • Header / Payload / Signature 형태로 구성
<Header>.<Payload>.<Signature>
  • Header 에는 토큰의 유형과 서명 알고리즘 명시
  • Payload 에는 claim이라 지칭 되는 사용자의 인증/인가 정보 명시
  • Signature 에는 헤더와 페이로드가 비밀키 형태로 서명되어 저장
  • Json 형태이므로 Key - Value 구조이며, Key는 3글자로 줄이는 관행이 있음
    - sub : 인증 주체(subject)
    - iss : 토큰 발급처
    - typ : 토큰의 유형(type)
    - alg : 서명 알고리즘(algorithm)
    - iat : 발급 시각(issued at)
    - exp : 말료 시작(expiration time)
    - aud : 클라이언트(audience)

장점

  • 쿠키와 세션을 사용하였을 때는 서버에서 사용자의 세션을 DB나 캐시로 저장하여 세션 ID를 통해 사용자 데이터 조회 필요
  • 하지만, JWT에서는 토큰 자체에 사용자 정보가 있기 때문에 토큰 검증만 진행
  • 추가로 CORS 문제에서 자유로움

단점 및 주의 사항

  • 모든 정보를 다 저장하지는 않기 때문에 특정 장비를 지칭한 사용자 정보 등과 같은 규모가 큰 사용자 인증에서는 부적합할 수 있음
  • 또한, 데이터를 누구나 쉽게 열람이 가능하므로 민감한 사용자 정보를 저장하면 보안 취약성이 있을 수 있음
  • 이에 따라 반드시 민감 정보는 암호화 필요

참조

profile
차근차근 기록하고 배우는 개발자

0개의 댓글