nicetool.dev logo

JWT란 무엇입니까?

JSON Web Token (JWT)은 당사자 간에 정보를 JSON 개체로 안전하게 전송하기 위한 컴팩트하고 독립적인 방식을 정의하는 개방형 표준 (RFC 7519)입니다. 이 정보는 디지털 서명되어 있으므로 확인하고 신뢰할 수 있습니다.

JWT 구조

JWT는 세 부분(헤더, 페이로드, 서명)으로 구성되며 각 부분은 Base64URL로 인코딩되어 있습니다. 각 부분은 마침표(.)로 구분되며 다음과 같은 형식을 따릅니다:

header.payload.signature

일반적인 사용 사례

  • 권한 부여: 가장 일반적인 시나리오입니다. 사용자가 로그인하면 이후의 각 요청에 JWT가 포함되어 사용자가 경로, 서비스 및 리소스에 액세스할 수 있습니다.
  • 정보 교환: JWT는 당사자 간에 유효한 자격 증명을 확인하는 좋은 방법입니다.
  • 스테이트리스 세션: 서버에 세션 데이터를 보관할 필요가 없습니다. 토큰에 필요한 모든 사용자 정보가 포함되어 있습니다.

개인정보 보호 및 보안

귀하의 보안이 당사의 최우선 과제입니다. 모든 JWT 디코딩 및 확인 로직은 브라우저의 JavaScript에서 클라이언트 측으로 수행됩니다. 토큰, 헤더 또는 페이로드는 당사 서버로 전송되지 않습니다.

100% 브라우저 기반

JWT 디버거 사용 방법

  1. 1

    eyJ로 시작하는 토큰을 Encoded 칸에 붙여넣으세요. 헤더와 페이로드가 즉시 디코딩되어 정리된 JSON으로 표시됩니다.

  2. 2

    표준 클레임을 확인하세요. exp, iat, nbf 같은 시간은 읽기 쉬운 날짜로 표시되어 토큰이 만료됐는지, 아직 유효하지 않은지 바로 알 수 있습니다.

  3. 3

    서명을 검증하려면 HMAC 시크릿(HS256/384/512)이나 PEM 형식 공개 키(RS256/384/512, ES256/384/512)를 입력하세요. 서명 일치 여부를 알려줍니다.

  4. 4

    Generator 모드로 바꾸면 테스트 토큰을 만들 수 있습니다. 페이로드를 수정하고 알고리즘을 고른 뒤 시크릿이나 개인 키를 입력해 서명된 JWT를 복사하세요.

활용 예시

401 오류 디버깅

API가 401 Unauthorized로 요청을 거부하면 토큰을 디코딩해 만료된 exp, 잘못된 aud(audience), 빠진 scope 클레임을 찾으세요.

ID 공급자 토큰 확인

Auth0, Keycloak, Firebase, Azure AD의 ID 토큰을 살펴 애플리케이션이 실제로 받는 클레임(email, roles, groups)을 확인하세요.

역할 기반 접근 테스트

개발용 시크릿으로 role "admin"과 role "viewer" 토큰을 만들어 권한 검사의 두 분기를 모두 테스트하세요.

키 교체 확인

키를 교체한 뒤 새 토큰과 새 공개 키를 붙여넣어 헤더의 kid와 서명이 새 키와 일치하는지 확인하세요.

자주 묻는 질문

JWT는 암호화되어 있나요?+

보통은 아닙니다. 표준 JWT(JWS)는 Base64URL로 인코딩되고 서명만 되어 있어 누구나 페이로드를 읽을 수 있습니다. 비밀번호나 민감한 개인정보는 넣지 마세요. 암호화된 토큰(JWE)은 다른 형식입니다.

세 부분은 무엇을 뜻하나요?+

header.payload.signature 구조로, 헤더는 알고리즘과 토큰 유형, 페이로드는 클레임을 담고, 서명은 앞의 두 부분이 키를 가진 쪽에서 만들어졌고 변조되지 않았음을 증명합니다.

운영 토큰을 붙여넣어도 안전한가요?+

디코딩과 검증은 모두 브라우저에서 이뤄지며 서버로 아무것도 보내지 않습니다. 그래도 유효한 토큰은 만료 전까지 비밀번호처럼 동작하므로 테스트 토큰을 쓰거나 디버깅 후 실제 토큰을 폐기하세요.

HS256과 RS256 중 무엇을 써야 하나요?+

HS256은 서명과 검증에 같은 공유 시크릿을 써서 서비스가 하나일 때 간단합니다. RS256과 ES256은 개인 키로 서명하고 공개 키로 검증하므로 여러 서비스가 한 곳에서 발급한 토큰을 검증하는 구조에 적합합니다.