본문 바로가기
Data Analysis/Computer Science

JWT (JSON Web Token)란?

by Hagrid 2024. 8. 6.
반응형

JWT (JSON Web Token)란?

  • *JWT (JSON Web Token)**는 인터넷 표준인 RFC 7519에 정의된, JSON 객체를 사용해서 토큰 자체에 정보들을 저장하는 Web 토큰입니다. JWT는 특히 웹사이트와 서버 간의 안전한 정보 교환을 위해 설계되었으며, 매우 간결하고 독립적입니다. 이 특성 덕분에 주로 분산된 시스템 환경에서 인증 및 정보 교환에 널리 사용됩니다.

JWT의 구조

JWT는 세 부분으로 나뉩니다: 헤더(Header), 페이로드(Payload), 서명(Signature). 이 세 부분은 각각 Base64로 인코딩되어 . (점)으로 구분되어 있는 문자열로 표현됩니다.

1. 헤더 (Header)

헤더는 토큰의 타입 (주로 "JWT")과 함께 사용하는 해시 알고리즘 (예: HMAC SHA256 또는 RSA)이 포함되어 있습니다.

예를 들어:

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

  • alg: 서명 및/또는 토큰 검증에 사용되는 암호화 알고리즘을 지정합니다.
  • typ: 토큰의 타입을 지정하며, JWT로 설정됩니다.

2. 페이로드 (Payload)

페이로드는 토큰에 담을 정보의 조각들인 **클레임(claims)**을 포함하고 있습니다. 클레임은 세 가지 유형이 있습니다: 등록된 (registered), 공개 (public), 비공개 (private) 클레임.

  • 등록된 클레임: 서비스에서 필요한 정보를 제공하기 위해 예약된 클레임으로, 모든 클레임은 선택적이지만, 자주 사용되는 클레임들은 다음과 같습니다.
    • iss (issuer): 토큰 발행자
    • sub (subject): 토큰 제목
    • aud (audience): 토큰 대상자
    • exp (expiration time): 토큰의 만료 시간
    • nbf (not before): 토큰의 시작 시간
    • iat (issued at): 토큰이 발행된 시간
    • jti (JWT ID): JWT의 고유 식별자
  • 공개 클레임: 충돌이 방지된 이름을 가지며, 보통 URI 형식으로 이름이 지정됩니다.
  • 비공개 클레임: 클라이언트와 서버 간의 합의 하에 사용되고 정의된 맞춤 클레임으로, 양측이 동의한 정보를 저장하기 위해 사용됩니다.

예를 들어:

jsonCopy code
{
  "sub": "1234567890",
  "name": "John Doe",
  "admin": true,
  "iat": 1516239022
}

3. 서명 (Signature)

서명은 헤더의 인코딩된 값과 페이로드의 인코딩된 값을 합친 후 주어진 비밀 키로 해시하여 생성합니다.

예를 들어, HMAC SHA256 알고리즘을 사용하는 경우:

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

JWT의 사용 방식

  1. 인증 (Authentication): 가장 흔한 JWT 사용 사례입니다. 사용자가 로그인하면, 서버는 사용자의 정보를 기반으로 JWT를 생성하고 반환합니다. 이후 사용자는 해당 토큰을 사용하여 서버에 요청을 보낼 때마다 인증을 받게 됩니다.
  2. 정보 교환 (Information Exchange): JWT는 두 개체 사이에서 안전하게 정보를 교환하기 위해 사용됩니다. JWT는 정보가 수정되지 않았음을 검증할 수 있는 서명이 포함되어 있습니다.

장점과 단점

장점

  • 자가 포함 (Self-contained): JWT는 필요한 모든 정보를 자체적으로 포함합니다. 따라서 별도의 저장소에 접근할 필요 없이 토큰만으로 필요한 정보를 얻을 수 있습니다.
  • 확장성 (Scalability): 세션을 저장할 필요가 없기 때문에 서버 자원을 아낄 수 있어 확장성 있는 인증 방식을 구현할 수 있습니다.
  • 모바일 앱 지원 및 CORS: 모바일 애플리케이션과 다양한 도메인 간 통신에서 쿠키보다 효과적입니다.

단점

  • 토큰 크기: JWT는 상대적으로 큰 크기를 가질 수 있어, HTTP 헤더에 사용될 때 네트워크 비용이 증가할 수 있습니다.
  • 토큰 만료 처리: JWT는 기본적으로 서버에서 만료를 변경할 수 없으므로, 만료되기 전까지는 클라이언트에서 계속 사용할 수 있습니다. 이를 위한 적절한 전략이 필요합니다.
  • 보안 주의: 비밀 키가 유출되면 토큰이 위조될 수 있으므로 보안 관리가 중요합니다.

JWT는 이러한 특성으로 인해 RESTful API를 중심으로 현대 웹 애플리케이션에서 인증 및 권한 부여에 널리 사용되고 있습니다.

반응형

댓글