JWT 인코더

브라우저에서 HS256, HS384, HS512로 JWT를 만들고 서명합니다. 헤더와 페이로드 JSON을 편집하며 클레임 순서와 kid 같은 추가 헤더 필드가 유지됩니다.

입력 내용과 파일은 브라우저 밖으로 전송되지 않습니다

헤더, 페이로드, 서명

서명

헤더와 페이로드의 JSON을 수정하세요. 서명된 토큰이 입력하는 즉시 여기에 표시됩니다.

이 페이지에서

API와 인증 흐름 테스트용 서명된 JSON Web Token을 만듭니다. 헤더와 페이로드 JSON을 편집하고 HS256, HS384, HS512 중 하나를 고른 뒤 시크릿을 입력해 토큰을 복사하면 됩니다. 토큰은 키를 누를 때마다 갱신됩니다.

상세 기능

헤더와 페이로드는 각각 JSON 객체여야 합니다. 잘못된 JSON이나 배열 같은 객체가 아닌 값은 해당 입력란 아래에 표시되며 토큰이 생성되지 않습니다. JSON은 압축(공백 제거)된 뒤 패딩 없는 base64url로 인코딩되며, 클레임 순서와 kid, cty 같은 추가 헤더 필드는 그대로 유지됩니다. 헤더의 alg 값은 목록에서 선택한 알고리즘으로 바뀌고, 없으면 맨 앞에 추가됩니다.

HMAC 서명(SHA-256, SHA-384, SHA-512)은 WebAssembly로 컴파일된 Rust 암호화 모듈이 계산하며, 시크릿은 UTF-8 텍스트로 사용됩니다. 대칭 HMAC 알고리즘만 제공되므로 개인 키가 필요한 RS256이나 ES256 토큰은 여기서 만들 수 없습니다. 시크릿이 비어 있어도 빈 키로 서명된 토큰이 생성되지만 실험용으로만 쓸 수 있습니다.

시크릿과 클레임은 페이지 안에만 머무르며 저장되지 않습니다. 도구는 iat 나 exp 를 자동으로 추가하지 않으므로 NumericDate 값(초 단위 Unix 시간)을 페이로드에 직접 넣으세요.

실용적인 예제

jwt.io 테스트 벡터: 기본 헤더 {"alg":"HS256","typ":"JWT"} 와 페이로드 {"sub":"1234567890","name":"John Doe","iat":1516239022} 에 시크릿 your-256-bit-secret 을 쓰면 SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c 로 끝나는 토큰이 나오며, jwt.io와 정확히 같습니다.

키 ID와 만료: 헤더 {"alg":"HS256","typ":"JWT","kid":"key-2026"}, 페이로드 {"sub":"42","role":"admin","exp":1767225600}, 알고리즘 HS384로 설정하면 인코딩된 헤더는 필드 순서를 유지한 {"alg":"HS384","typ":"JWT","kid":"key-2026"} 가 되고 서명은 64자입니다.

객체가 아닌 값: 페이로드가 [1,2] 이면 입력란 아래에 “JSON 객체여야 합니다”가 표시되고 토큰이 지워집니다.

이 도구 사용 방법

  1. 헤더 편집

    헤더 의 JSON을 조정합니다. 검증 측에서 필요하면 kid 를 추가하세요. alg 는 알고리즘 목록에서 설정됩니다.

  2. 클레임 작성

    클레임(sub, role, exp …)을 JSON 객체로 페이로드 에 입력합니다.

  3. 알고리즘과 시크릿 선택

    알고리즘 에서 HS256, HS384, HS512 중 하나를 고르고 비밀 키 에 공유 시크릿을 입력합니다.

  4. 토큰 복사

    인코딩된 토큰 의 토큰은 변경할 때마다 갱신됩니다. 토큰 복사 를 눌러 복사합니다.

팁 및 모범 사례

  • 해시 길이 이상의 무작위 시크릿을 사용하세요: HS256은 32바이트, HS384는 48바이트, HS512는 64바이트.
  • exp, nbf, iat 는 밀리초가 아니라 초 단위입니다: 1767225600000 이 아니라 1767225600.
  • 끝의 공백이나 줄바꿈을 포함해 시크릿의 모든 문자가 계산에 쓰입니다.
  • 페이로드는 base64url로 인코딩될 뿐 암호화되지 않으므로 토큰을 가진 누구나 읽을 수 있습니다.
  • 같은 시크릿으로 JWT 디코더에서 결과를 확인해 보세요.