# JWT 디코더 및 검증기

JSON Web Token을 디코딩하고 만료와 클레임을 확인하며, 비밀 키나 공개 키로 서명을 검증하세요.

https://codeknife.dev/ko/jwt-dekoder/

## 기능 소개

JSON Web Token을 디코딩해 헤더와 페이로드를 읽고, 만료되었는지 확인하고, 시크릿이나 공개 키로 서명을 검증합니다. 토큰은 브라우저에서 디코딩하고, 이 페이지에는 광고가 없으며, 토큰과 키는 공유되거나 저장되지 않습니다.

## 사용 방법

1. 토큰을 붙여넣습니다. `Bearer ` 접두사와 줄 바꿈은 무시합니다.
2. 페이로드를 정리된 형식 또는 압축 JSON으로 읽습니다. 그 아래에서 알고리즘, 상태, 그리고 `exp`, `nbf`, `iat` 시각과 현재 시각과의 차이를 볼 수 있습니다.
3. 서명을 검증하려면 키를 입력합니다. HS256, HS384, HS512는 시크릿, RS, PS, ES, EdDSA는 공개 키(PEM 또는 JWK)를 사용합니다.
4. 헤더와 페이로드를 JSON과 클레임 사이에서 전환할 수 있습니다. 클레임 보기는 각 클레임과 그 의미를 나열하고 시간 클레임을 날짜로 보여 줍니다.
5. 인코드 탭에서 헤더와 페이로드를 작성하고 시크릿이나 개인 키(PKCS#8 PEM 또는 JWK)로 서명할 수 있습니다. 이 탭의 내용은 저장되거나 공유되거나 기록에 추가되지 않습니다.

## 예제

```
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
```

이 토큰의 페이로드입니다.

```json
{
  "sub": "1234567890",
  "name": "John Doe",
  "iat": 1516239022
}
```

서명은 시크릿 `your-256-bit-secret`으로 검증됩니다.

## 알아두면 좋은 점

- 디코딩은 검증이 아닙니다. 페이로드는 암호화된 것이 아니라 인코딩만 되어 있어서 누구나 읽을 수 있습니다.
- 서버는 어떤 클레임이든 신뢰하기 전에 반드시 서명을 검증해야 합니다.
- 알고리즘이 `none`인 토큰은 서명되지 않은 것이므로 누구든 만들 수 있습니다.
- 실제로 사용 중인 토큰은 비밀번호처럼 다루세요. 여기에 붙여넣을 때는 만료되었거나 테스트용인 토큰을 권장합니다.
- 붙여넣은 JWKS는 토큰의 `kid`로 키를 찾고, 단일 JWK는 그대로 사용합니다. 이 페이지는 토큰 발급자로부터 키 세트를 가져오지 않습니다.
- 해시보다 짧은 HMAC 시크릿(32, 48, 64바이트)은 추측될 수 있어 경고가 표시됩니다. 시크릿은 UTF-8 텍스트 또는 Base64URL로 읽을 수 있습니다.

## JWT란?

JSON Web Token은 점으로 이어진 세 개의 Base64URL 부분입니다. 서명 알고리즘을 알리는 헤더, 토큰의 대상과 만료 시각 같은 클레임을 담은 페이로드, 그리고 서명입니다. 앞의 두 부분은 누구나 읽을 수 있고, 키를 가진 쪽에서 온 토큰임을 증명하는 것은 서명뿐입니다.

## 자주 묻는 질문

### 디코딩과 검증은 같은 건가요?

아니요. 디코딩은 암호화되지 않은 내용을 읽을 뿐입니다. 검증은 키로 서명을 확인하는 것이며, 서버는 어떤 클레임이든 신뢰하기 전에 이를 해야 합니다.

### exp, nbf, iat는 무슨 뜻인가요?

exp는 토큰이 만료되는 시각, nbf는 그 전에는 유효하지 않은 시각, iat는 발급 시각이며 모두 1970년 이후의 초 단위입니다. 이 도구는 기기의 시계와 비교합니다.

### 실제 토큰을 붙여 넣어도 안전한가요?

토큰은 브라우저에서 디코딩되고 저희 서버로 전송되지 않으며 이 페이지에는 광고도 없습니다. 그래도 유효한 토큰은 비밀번호처럼 다루고, 만료되었거나 테스트용인 토큰을 쓰는 것이 좋습니다.