JWT

버들비·2021년 7월 6일
0

reference
https://jwt.io/introduction/

JWT의 형태

JWT는 세가지로 구성.

  • Header
  • Payload
  • Signature

xxxxx.yyyyy.zzzzz

타입과 어떤 알고리즘을 사용할지 기록하는 부분.

{
  "alg": "HS256",
  "typ": "JWT"
}

JSON은 Base64Url 로 인코딩돼서 xxxxx 자리에 들어간다.

Payload

본문에 해당하는 것. 이때 본문에 사용되는 key 들은 간결함을 위해 세글자 알파벳을 쓰는 걸 auth0 는 권장하는듯.

  • iss : 토큰을 발급한 발급자(issuer)
  • sub : 토큰의 주제(subject)
  • aud : 토큰을 받을 수신자(audience)
  • exp : 만료시간. 만료시간이 지난 토큰은 reject 해야한다.
  • iat : 토큰이 발급된 시간(issued at)
  • nbf : not before. 이 시간 이전에는 토큰을 처리하지 말아라.

이중에 자신이 필요한것을 json 에 집어넣어서 payload 를 구성하면 된다.

{
"sub": "1234567890",
"name": "John Doe",
"admin": true
}

Payload 도 Base64Url 로 인코딩돼서 yyyyy 자리에 들어간다. 단순히 base64 인코딩 하는거라, payload 가 길어질수록 jwt 의 길이도 길어진다.

Do note that for signed tokens this information, though protected against tampering, is readable by anyone. Do not put secret information in the payload or header elements of a JWT unless it is encrypted.
JWT 의 헤더나 페이로드에 암호화 없이 민감한 정보를 집어넣지 마라.

Signiture

헤더와 페이로드, 그리고 secret 문자열을 합쳐 서명을 만든다.

HMACSHA256(
  base64UrlEncode(header) + "." +
  base64UrlEncode(payload),
  secret)

시그니쳐는 위변조를 막고 커뮤니케이션 하는 사람이 제대로 된 사람인지 체크하기 위해 사용된다.

시그니쳐 문자열은 zzzzz 자리에 들어간다.

JWT 는 다음과 같은 형태가 된다.

JWT 는 어떻게 동작하나?

인증과정에서 사용자가 크레덴셜을 통해 성공적으로 로그인하면 JWT 가 반환된다.

사용자가 인증이 필요한 라우팅에 접근하려면, Bearer 라는 구조의 헤더를 사용해야 한다.

Authorization: Bearer <token>

서버는 Authorization 헤더에 있는 토큰을 검증하고 제대로된 접근인지 판단한다.

이때 인증토큰에 기록된 내용은 사용자가 변경할 수는 없지만 사용자 또는 다른 이에게 노출될 수 있다.

0개의 댓글