CoderTools

JWT 인코더/디코더

JWT 토큰을 안전하게 디코딩, 검증 및 생성

디코딩된 JWT

헤더


                        

페이로드


                        

서명


                        

JWT란 무엇인가요?

JSON 웹 토큰 (JWT)

JWT (JSON Web Token)는 당사자 간에 정보를 JSON 객체로 안전하게 전송하기 위한 간결하고 독립적인 방법을 정의하는 공개 표준(RFC 7519)입니다. 이 정보는 디지털 서명되어 있기 때문에 검증 및 신뢰할 수 있습니다. JWT는 비밀 키(HMAC 알고리즘 사용) 또는 RSA나 ECDSA를 사용한 공개/개인 키 쌍으로 서명할 수 있습니다.

JWT 구조

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

xxxxx.yyyyy.zzzzz
  • 헤더 : 토큰 유형(JWT)과 서명 알고리즘(예: HS256, RS256)을 포함합니다
  • 페이로드 : 클레임 - 엔티티(일반적으로 사용자)에 대한 설명과 추가 데이터를 포함합니다
  • 서명 : JWT의 발신자가 실제로 본인임을 확인하고 메시지가 전송 중에 변경되지 않았는지 확인하는 데 사용됩니다

서명 알고리즘

JWT는 다양한 서명 알고리즘을 지원합니다:

  • HS256: SHA-256을 사용한 HMAC. 공유 비밀 키를 사용하는 대칭 알고리즘
  • HS384: SHA-384를 사용한 HMAC. 더 강력한 해시를 사용하는 대칭 알고리즘
  • HS512: SHA-512를 사용한 HMAC. 가장 강력한 해시를 사용하는 대칭 알고리즘
  • RS256: SHA-256을 사용한 RSA 서명. 공개/개인 키 쌍을 사용하는 비대칭 알고리즘
  • RS384: SHA-384를 사용한 RSA 서명. 더 강력한 해시를 사용하는 비대칭 알고리즘
  • RS512: SHA-512를 사용한 RSA 서명. 가장 강력한 해시를 사용하는 비대칭 알고리즘

표준 클레임

JWT는 유용한 정보를 제공하는 여러 표준 클레임(등록된 클레임 이름)을 정의합니다:

  • iss (Issuer): 토큰 발급자
  • sub (Subject): 토큰의 주제 (사용자 ID)
  • aud (Audience): 의도된 수신자
  • exp (Expiration Time): 만료 시간 (Unix 타임스탬프)
  • nbf (Not Before): 이 시간 이전에는 유효하지 않음
  • iat (Issued At): 발급 시간
  • jti (JWT ID): 토큰의 고유 식별자

일반적인 사용 사례

  • 인증: 사용자 로그인 후 각 후속 요청에 JWT가 포함되어 경로, 서비스 및 리소스에 대한 액세스를 허용합니다
  • 정보 교환: 서명 검증을 통해 당사자 간에 안전하게 정보를 전송합니다
  • 싱글 사인온 (SSO): 낮은 오버헤드와 도메인 간 기능으로 인해 SSO 기능에 널리 사용됩니다
  • API 인가: RESTful API에 대한 상태 비저장 인증
  • OAuth 2.0 및 OpenID Connect: 최신 인증 프로토콜의 핵심 구성 요소

보안 참고사항: JWT 토큰은 진위 여부를 확인하기 위해 서명되지만 기본적으로 암호화되지 않습니다. 별도로 암호화하지 않는 한 페이로드에 민감한 정보를 저장하지 마세요. 토큰 전송 시 항상 HTTPS를 사용하세요. 토큰을 안전하게 저장하세요(예: 웹 애플리케이션의 경우 httpOnly 쿠키). 적절한 토큰 만료 및 갱신 메커니즘을 구현하세요. 클라이언트 측 코드에서 비밀 키를 노출하지 마세요.

참고 자료