안전한 로컬 JWT 인코더
이 jwt 인코더를 사용하면 개발자가 브라우저에서 직접 JSON Web Token을 빠르게 작성, 수정 및 서명할 수 있습니다. 인증 플로우 구축, API 엔드포인트 테스트, 마이크로서비스 디버깅 등 어떤 작업을 하든, 별도의 스크립트를 작성하거나 타사 서버에 자격 증명을 노출할 필요 없이 즉시 유효한 토큰을 생성할 수 있습니다.
이 도구는 브라우저의 기본 Web Crypto API를 사용하므로, 모든 데이터 처리와 암호화 서명이 전적으로 사용자의 기기에서 이루어집니다. 사용자의 JSON 페이로드와 비밀 키는 절대 업로드되거나 저장, 기록되지 않습니다. 이러한 로컬 우선 방식 덕분에 민감한 개발 및 스테이징 자격 증명을 다룰 때도 온라인에서 안전하게 JWT 서명이 가능합니다.
JWT 토큰 생성 방법
JWT 토큰을 생성하려면 알고리즘을 정의하는 헤더(header), 데이터를 포함하는 페이로드(payload), 토큰을 안전하게 보호하는 비밀 키(secret key)라는 세 가지 요소가 필요합니다.
먼저 알고리즘을 선택하세요. 이 도구는 강력한 HS256 JWT 생성기로 작동하며, HS384와 HS512도 지원합니다. 이들은 대칭형 HMAC 알고리즘으로, 토큰 서명과 추후 검증에 정확히 동일한 비밀 키를 사용합니다. 숫자(예: 512)가 클수록 생성되는 해시 크기가 커지며, 토큰 문자열은 약간 길어지지만 더 강력한 암호화 보안을 제공합니다.
다음으로 제공된 텍스트 영역에 페이로드를 입력하세요. 페이로드는 유효한 JSON 형식이어야 합니다. JSON을 수정하거나 비밀 키를 업데이트하면 도구가 실시간으로 서명을 다시 계산하며, JSON 구조에 문법 오류가 있을 경우 즉시 알려줍니다. 페이로드와 비밀 키 설정이 끝나면, 완성된 토큰을 복사하여 애플리케이션의 Authorization 헤더나 쿠키에 바로 사용할 수 있습니다.
토큰 생성의 주요 활용 사례
최신 웹 개발에서는 신뢰할 수 있는 JWT 생성기를 갖추는 것이 필수적입니다. 개발자들은 주로 다음과 같은 다양한 테스트 및 디버깅 상황에서 이 도구를 활용합니다:
API 엔드포인트 테스트: Postman이나 Insomnia 같은 API 클라이언트로 보호된 라우트에 접근하려면 유효한 Bearer 토큰이 필요합니다. 프론트엔드 앱 전체를 실행해 로그인하고 토큰을 발급받는 대신, 여기서 필요한 사용자 ID와 권한(Role)을 지정해 수동으로 토큰을 생성할 수 있습니다.
인증 로직 디버깅: 백엔드에서 토큰이 거부될 때, 수동으로 토큰을 생성해 보면 문제의 원인을 쉽게 파악할 수 있습니다. 시크릿 키 오류, 페이로드 형식 불량, 서명 알고리즘 불일치 중 어떤 것이 문제인지 검증할 수 있습니다.
엣지 케이스 생성: 만료된 토큰, 누락된 클레임(Claim), 권한 없는 역할 등을 백엔드가 어떻게 처리하는지 테스트하는 것은 보안상 매우 중요합니다. 여기서 JSON 페이로드를 간단히 조작하여 다양한 엣지 케이스를 만들고, 서버가 올바른 HTTP 상태 코드를 반환하는지 확인할 수 있습니다.
타임스탬프 및 클레임 관리
JSON Web Token은 토큰의 수명 주기와 사용자 정보를 전달하기 위해 클레임(claim)이라는 특정 필드를 사용합니다. 가장 많이 쓰이는 시간 관련 클레임은 iat(발급 시간)와 exp(만료 시간)입니다. 두 클레임 모두 1970년 1월 1일 이후 경과한 시간을 초 단위로 나타내는 Unix 타임스탬프를 사용해야 합니다.
테스트 중 타임스탬프를 매번 직접 계산하는 것은 번거로울 수 있습니다. 작업 속도를 높일 수 있도록 페이로드 편집기 상단에 빠른 실행 버튼을 제공합니다.
- iat = now를 클릭하면
iat필드에 현재 Unix 시간이 즉시 입력되거나 업데이트됩니다. - exp = +1h 또는 exp = +24h를 클릭하면 해당 시간만큼 더해진 타임스탬프가 계산되어
exp필드에 업데이트됩니다.
이를 통해 생성된 토큰이 즉시 유효성을 갖게 되며, 서버의 시간 검증 로직에서 토큰이 잘못 거부되는 것을 방지할 수 있습니다.
Base64 시크릿 키 처리
온라인에서 JWT를 서명할 때 자주 겪는 문제 중 하나는 시크릿 키 인코딩 처리입니다. 많은 백엔드 시스템과 튜토리얼에서는 HMAC 시크릿 키로 강력한 난수 바이트 배열을 생성한 뒤, 이를 환경 변수에 Base64 문자열 형태로 저장하도록 권장합니다.
서버가 토큰을 서명하거나 검증하기 전에 이 Base64 문자열을 원시 바이트(raw bytes)로 디코딩하는 경우, Base64 문자열을 일반적인 JWT 생성기에 그대로 붙여넣으면 유효하지 않은 서명이 생성됩니다. 생성기가 Base64 문자 자체를 일반 텍스트로 취급하여 서명 불일치가 발생하기 때문입니다.
이 문제를 해결하려면 Secret is Base64 encoded 체크박스를 선택하기만 하면 됩니다. 이 도구는 HMAC 해시를 적용하기 전에 시크릿 문자열을 원래의 원시 바이트로 디코딩하여, 생성된 서명이 백엔드 환경과 완벽하게 일치하도록 보장합니다.
JWT 구조 이해하기
토큰을 생성하면 구조를 쉽게 이해할 수 있도록 결과가 색상으로 구분되어 표시됩니다. 표준 JWT는 마침표(.)로 구분된 세 부분으로 구성됩니다:
- 헤더(빨간색): 토큰의 메타데이터, 주로 서명 알고리즘(예:
{"alg":"HS256","typ":"JWT"})을 포함합니다. 선택한 알고리즘에 따라 자동으로 생성되며 Base64-URL로 인코딩됩니다. - 페이로드(파란색): 실제 JSON 데이터이며, 마찬가지로 Base64-URL로 인코딩됩니다. 이 부분은 토큰을 가로챈 누구나 쉽게 읽을 수 있으므로, 비밀번호나 매우 민감한 데이터를 페이로드에 포함해서는 절대 안 됩니다.
- 서명(초록색): 인코딩된 헤더와 페이로드의 암호화 해시로, 시크릿 키를 사용하여 서명됩니다. 이는 전송 중 토큰이 변조되지 않았음을 보장합니다.
기존 토큰이 있고 시크릿 키 없이 내용을 확인하고 싶다면, JWT 디코더에 붙여넣어 헤더와 페이로드를 안전하게 검사할 수 있습니다.