본문으로 건너뛰기
SPCX Tools

JWT 인코더

브라우저에서 즉시 HMAC 기반 JSON Web Token(JWT)을 생성하고 서명하세요.

로컬 실행 — 파일이 기기 외부로 전송되지 않습니다

도구 불러오는 중…

JWT 인코더 사용 방법

  1. 1원하는 HMAC 서명 알고리즘(HS256, HS384, HS512)을 선택하세요.
  2. 2JSON 페이로드를 편집하세요. 빠른 버튼을 사용하여 iat 및 exp와 같은 표준 클레임에 현재 시간을 삽입할 수 있습니다.
  3. 3비밀 키(Secret key)를 입력하세요. 시스템에서 Base64로 인코딩된 비밀 키를 사용한다면 Base64 체크박스를 선택하세요.
  4. 4입력하는 동안 서명된 토큰이 자동으로 업데이트됩니다. 복사 버튼을 클릭해 최종 JWT를 복사하세요.

안전한 로컬 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는 마침표(.)로 구분된 세 부분으로 구성됩니다:

  1. 헤더(빨간색): 토큰의 메타데이터, 주로 서명 알고리즘(예: {"alg":"HS256","typ":"JWT"})을 포함합니다. 선택한 알고리즘에 따라 자동으로 생성되며 Base64-URL로 인코딩됩니다.
  2. 페이로드(파란색): 실제 JSON 데이터이며, 마찬가지로 Base64-URL로 인코딩됩니다. 이 부분은 토큰을 가로챈 누구나 쉽게 읽을 수 있으므로, 비밀번호나 매우 민감한 데이터를 페이로드에 포함해서는 절대 안 됩니다.
  3. 서명(초록색): 인코딩된 헤더와 페이로드의 암호화 해시로, 시크릿 키를 사용하여 서명됩니다. 이는 전송 중 토큰이 변조되지 않았음을 보장합니다.

기존 토큰이 있고 시크릿 키 없이 내용을 확인하고 싶다면, JWT 디코더에 붙여넣어 헤더와 페이로드를 안전하게 검사할 수 있습니다.

자주 묻는 질문 (FAQ)

이 도구는 어떤 알고리즘을 지원하나요?
이 도구는 현재 HMAC 기반 알고리즘인 HS256(HMAC with SHA-256), HS384, HS512를 지원합니다. 이는 대칭키 알고리즘으로, 토큰 서명과 검증에 동일한 비밀키(secret key)를 사용합니다.
내 비밀키가 서버로 전송되나요?
아니요. 모든 암호화 서명은 Web Crypto API를 사용하여 브라우저에서 로컬로 처리됩니다. JSON 페이로드와 비밀키는 기기 외부로 전송되지 않으므로 테스트용 토큰을 안전하게 생성할 수 있습니다.
Base64 체크박스는 어떤 역할을 하나요?
많은 백엔드 프레임워크에서 JWT 비밀키는 일반 텍스트가 아닌 Base64 인코딩 문자열로 저장됩니다. 이 체크박스를 선택하면 HMAC 알고리즘을 적용하기 전에 입력값을 원시 바이트(raw bytes)로 디코딩하여, 생성된 서명이 서버가 예상하는 값과 정확히 일치하도록 합니다.
시간 버튼은 어떻게 작동하나요?
iat(발급 시간) 및 exp(만료 시간) 버튼은 표준 Unix 타임스탬프(1970년 1월 1일 이후의 초 단위 시간)를 JSON 페이로드에 삽입합니다. 이를 통해 현재 에포크 시간(epoch time)을 직접 찾거나 계산할 필요가 없습니다.
서버에서 토큰을 검증할 때 유효하지 않다고 나오는 이유는 무엇인가요?
가장 일반적인 원인은 비밀키 불일치, 잘못된 알고리즘 사용, 또는 비밀키 인코딩 방식의 차이입니다. 정확히 동일한 비밀키 문자열을 사용하고 있는지 확인하고, 서명 전에 서버에서 비밀키를 Base64로 디코딩해야 하는지 확인하세요.