[Web] JWT(JSON Web Token)란?

해피몬·2023년 4월 25일
0
post-thumbnail

JWT(JSON Web Token)는 두 개체 간에 정보를 안전하게 전송하기 위해 사용하는 간단하고 자가 포함적인 방식의 토큰입니다. 주로 웹 애플리케이션에서 인증(Authentication) 및 권한 부여(Authorization)를 위해 사용됩니다.

구조

점(.)으로 구분된 세 부분으로 구성됩니다.

헤더(Header)
페이로드(Payload)
서명(Signature)

<header>.<payload>.<signature>

헤더(Header)

헤더는 일반적으로 두 가지 정보를 포함합니다:

토큰의 타입(예: JWT)
서명 알고리즘(예: HS256, RS256)

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

페이로드(Payload)

페이로드는 토큰에 담을 클레임(Claims)을 포함하며, 이는 사용자에 대한 정보나 메타데이터입니다. 클레임은 다음과 같은 종류가 있습니다:

  • 등록된 클레임(Registered Claims): iss(발급자), exp(만료 시간), sub(주제) 등 표준 클레임입니다.
  • 공개 클레임(Public Claims): 사용자 정의 클레임으로, 일반적으로 사용자 정보 등을 저장합니다.
  • 비공개 클레임(Private Claims): 발급자와 수신자 간의 협의에 따라 사용하는 클레임입니다.
{
  "sub": "1234567890",
  "name": "John Doe",
  "admin": true
}

서명(Signature)

서명은 토큰의 무결성을 보장하기 위해 사용됩니다. 서명은 인코딩된 헤더와 페이로드, 그리고 비밀 키를 이용해 생성됩니다.

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

JWT의 사용 사례

  • 인증(Authentication): 사용자가 로그인하면 서버가 JWT를 발급하여 클라이언트에 전달합니다. 클라이언트는 이후 요청 시 이 토큰을 HTTP 헤더에 포함시켜 서버에 인증을 요청합니다.
  • 권한 부여(Authorization): 인증된 사용자가 특정 리소스에 접근할 수 있는 권한이 있는지 확인하는 데 사용됩니다.

장점

  • 토큰에 모든 정보가 포함되어 있어, 서버가 별도의 세션 정보를 유지할 필요가 없습니다.
  • URL, HTTP 헤더, POST 요청 본문 등에 쉽게 포함하여 전송할 수 있습니다.
  • 서명을 통해 데이터의 무결성을 검증할 수 있어 신뢰할 수 있습니다.

한계점

  • 일반적으로 크기가 커서 모바일 환경이나 저속 네트워크에서는 성능에 영향을 미칠 수 있습니다.
  • 토큰이 유출될 경우를 대비해 만료 시간을 짧게 설정해야 합니다.
  • 한 번 발급된 토큰을 무효화하기 어렵기 때문에, 별도의 관리 기법이 필요할 수 있습니다.

예시

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
profile
슬기로운개발생활🤖

0개의 댓글