# JWT デコーダー・検証ツール

JSON Web Token をデコードし、有効期限やクレームを確認し、シークレットや公開鍵で署名を検証できます。

https://codeknife.dev/ja/jwt-decoder/

## 概要

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 は、ドットでつないだ3つの Base64URL 部分です。署名アルゴリズムを示すヘッダー、誰向けのトークンか・いつ期限が切れるかなどのクレームを持つペイロード、そして署名です。最初の2つは誰でも読めますが、鍵の持ち主から来たトークンであることを証明できるのは署名だけです。

## よくある質問

### デコードと検証は同じ?

いいえ。デコードは暗号化されていない中身を読むだけです。検証は鍵で署名を確認する処理で、サーバーはクレームを信頼する前に必ず行う必要があります。

### exp、nbf、iat とは?

exp は期限切れの時刻、nbf はそれより前は無効となる時刻、iat は発行時刻で、いずれも1970年からの秒数です。このツールはお使いの端末の時計と比較します。

### 本物のトークンを貼り付けても安全?

トークンはブラウザ内でデコードされ、当社のサーバーに送信されることはなく、このページに広告もありません。それでも有効なトークンはパスワードと同様に扱い、期限切れやテスト用のものを使うのがおすすめです。