JWT 토큰

정재현·2022년 1월 27일

JWT(Jason Web Token)


  • session

    대부분의 웹 애플리케이션 서버가 세션을 지원. 편리함
    서버에서 세션을 관리

    • 서버가 여러대일 경우
    • SSO인 경우 비용
      비용증가
  • token

    클라이언트가 토큰을 저장
    모든 요청에 토큰을 가지고 접근

Why?

세션 대신 토큰을 사용하려는 이유는 확장성 때문이다. 만약 여러 서버가 돌아가는 상황이라면, 각 서버마다 세션 저장소를 두거나, 공통 세션 저장소를 만들어야하는데, 이 또한 비용이다. 반면에 토큰은 stateless 하기 때문에 확장에 용이하다.
출처 : https://velog.io/@max9106/OAuth

  • 사용자 인증

  • 디지털 서명이 되어 있어 신뢰할 수 있다

  • 서명된 토큰에 중점

  • 서명 토큰안의 클레임의 무결성 보장

  • xxxxx,yyyyy,zzzzz

    • 헤더
    {
    "alg" : "HS256",
    "typ" : "JWT"
    }
    • 유효 탑재량(정보)
    {
    "sub": "1234567890",
    "name": "John Doe",
    "admin": true
    }
    • 서명
    HMACSHA256(
    base64UrlEncode(header) + "." +
    base64UrlEncode(payload),
    secret)
  • 인코딩, 디코딩 가능

  • HMAC or RSA

출처 : https://jwt.io/introduction

JWT 스펙에서 지정한 claim(권장됨 not essential)

  • iss : Issuer 토큰을 발행한 사람
  • sub : Subject 무엇에 관한 토큰인지
  • aud : Audience 누구를 대상으로 한 토큰인지
  • exp : Expiration 토큰의 만료 시간은 언제인지
  • nbf : Not Before 토큰이 언제부터 유효한지
  • iat : Issued At 토큰 발행 시간
  • jti : JWT ID 토큰 자체의 아이디

나머지는 자유(개인 클레임)

토큰에 어떤 내용이?

  • 인증에 필요한 최소의 데이터
  • 비밀번호 등은 안전하지 않다
  • 공개할 수 있는 정보를 넣는 것이 좋다
  • 언제든 서버는 이 토큰을 열어 내용을 볼 수 있다
profile
back end개발자로 성장하기

0개의 댓글