본문 바로가기
기타

JWT란? 구조, 사용 사례, 그리고 보안 팁

by 니나노뭉 2024. 10. 24.

웹서비스에서 JSON web token을 사용할 일이 있어서 정리하게 되었습니다.

 


JWT(JSON Web Token)는 JSON 형식으로 정보를 저장하고, 두 시스템 간에 안전하게 데이터를 전송하기 위한 표준 토큰입니다. 주로 사용자 인증 및 권한 부여에 사용됩니다. JWT는 서버와 클라이언트 간의 정보를 안전하게 교환할 수 있도록 설계되었으며, 디지털 서명이 포함되어 있어 정보의 무결성을 보장합니다. 여기서는 JWT의 구조, 사용 사례, 보안 측면을 자세히 설명하겠습니다.

1. JWT 구조

JWT는 .으로 구분된 세 부분으로 구성됩니다:

  • Header (헤더): 토큰의 타입(JWT)과 사용할 서명 알고리즘(예: HMAC SHA256)을 정의합니다.
  • Payload (페이로드): 실제로 전달하고자 하는 데이터(주로 사용자 정보, 권한 등)를 포함합니다. 이 데이터는 JSON 형식으로 저장됩니다.
  • Signature (서명): 헤더와 페이로드의 무결성을 검증하기 위해 사용됩니다. 서버는 비밀 키를 사용해 서명을 생성하고, 이를 통해 토큰이 변조되지 않았음을 확인할 수 있습니다.

예시:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
.
eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ
.
SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

이러한 세 가지 요소를 Base64 URL-safe encoding으로 인코딩하여 하나의 문자열로 결합하면 JWT가 됩니다.

2. JWT 사용 사례

  1. 인증(Authentication): 사용자가 로그인하면 서버는 사용자 정보를 기반으로 JWT를 생성하여 클라이언트에 전달합니다. 이후 클라이언트는 이 토큰을 요청마다 포함하여 서버에 전송하고, 서버는 토큰을 검증하여 사용자를 식별합니다.
  2. 권한 부여(Authorization): JWT는 사용자가 특정 리소스에 접근할 권한이 있는지 확인하는 데 사용됩니다. 토큰에 포함된 정보(예: 사용자의 역할, 권한 등)를 서버가 해석하여 권한을 부여할 수 있습니다.
  3. 정보 교환: 클라이언트와 서버 간에 안전하게 데이터를 주고받는 용도로도 사용됩니다. 데이터는 서명으로 보호되기 때문에 제3자가 변조할 수 없습니다.

3. JWT 보안

JWT는 정보의 무결성을 보장하기 위해 서명되지만, 자체적으로 암호화된 것은 아닙니다. 따라서 토큰에 민감한 정보를 포함해서는 안 됩니다. 이를 고려한 몇 가지 보안 팁은 다음과 같습니다:

  • 비밀 키 관리: 서버에서 사용하는 비밀 키는 철저하게 보호해야 합니다. 키가 유출되면 공격자가 임의로 토큰을 생성할 수 있습니다.
  • 토큰 유효기간 설정: 토큰은 만료 시간(expiration)을 지정하여 사용 기간을 제한해야 합니다. 너무 긴 유효기간은 보안 위험을 증가시킬 수 있습니다.
  • HTTPS 사용: JWT가 네트워크를 통해 전달될 때, 민감한 정보가 노출되지 않도록 HTTPS를 사용해야 합니다.
  • 리프레시 토큰 사용: 인증 토큰의 수명이 짧게 설정된 경우, 사용자 편의성을 위해 리프레시 토큰을 사용해 세션을 연장할 수 있습니다.

4. JWT의 장점

  • 확장성: 상태를 저장할 필요 없이, 토큰만으로 인증을 할 수 있기 때문에 서버의 부하가 적습니다.
  • 분산 시스템: 중앙 서버에서 상태 정보를 저장하지 않기 때문에 분산된 환경에서 매우 유리합니다.
  • 자기 포함성: 토큰에 필요한 모든 정보가 포함되어 있으므로, 서버는 추가적인 데이터베이스 조회 없이 사용자 정보를 확인할 수 있습니다.

5. JWT의 단점

  • 토큰 크기: JWT는 자체적으로 데이터를 포함하기 때문에 토큰 크기가 커질 수 있습니다. 특히, 페이로드에 많은 정보를 포함하면 문제가 될 수 있습니다.
  • 만료된 토큰 관리: JWT는 기본적으로 서버 측에서 상태를 유지하지 않으므로, 토큰이 발급된 후 만료되기 전까지는 서버에서 이를 무효화하기 어렵습니다.

결론적으로, JWT는 보안과 확장성이 중요한 애플리케이션에서 매우 유용한 도구이지만, 적절한 보안 조치를 함께 취해야 효과적으로 사용할 수 있습니다.


 

해당 페이지에서  encoding된 jwt를 decoding 할 수 있습니다.

JSON Web Tokens - jwt.io

 

JWT.IO

JSON Web Tokens are an open, industry standard RFC 7519 method for representing claims securely between two parties.

jwt.io