JWT トークンのデコード方法:開発者ガイド
JWT トークンをデコードしてヘッダー、ペイロード、クレームを検査する方法を学びます。無料ブラウザ内デコーダー付き。
JWT とは何か?なぜデコードするのか?
JSON Web Token (JWT) は、二者間でクレーム(claims)を伝送するためのコンパクトで URL セーフなトークン形式です。最も一般的にはクライアントとサーバー間で使用されます。JWT は 3 つの Base64URL エンコードされた部分をドットで区切った構造で、ヘッダー、ペイロード、署名から成ります。
JWT のデコードとは、ヘッダーとペイロードを読み取り、どのようなクレームが含まれているかを理解することです。認証フローのデバッグ、API レスポンスのトークン確認、あるいは「代わりにどんなデータが送られているのか」を理解するために不可欠です。重要なのは、デコードは署名を検証しないということです。検証には発行側の秘密鍵または公開鍵が必要です。
よくある用途
- 認証フローのデバッグ:ログイン API が返すトークンを確認
- クレームの監査:有効期限、発行者、対象、カスタムフィールドの確認
- ローカル開発:localStorage や cookie に保存されたトークンを読む
- 学習:モダン Web アプリの認証の仕組みを理解する
- セキュリティレビュー:トークンにうっかり含まれた機密データを発見
方法 1:UtilBoxx の無料 JWT デコーダーを使う(推奨)
当社の JWT デコーダー は任意の JWT を解析し、ヘッダーとペイロードを読みやすい形式で表示し、タイムスタンプを人間の日付に変換します。手順は次のとおりです:
- utilboxx.com/ja/tools/crypto/jwt にアクセス
- 入力欄に JWT を貼り付け
- ヘッダーとペイロードが即座にデコード表示される
- 有効期限、発行時刻、その他のクレームを確認
- ワンクリックで任意のセクションをコピー
この方法の長所:
- 完全にブラウザ内で動作 — トークンは端末から出ない
- JSON を自動的に整形して可読化
- 期限切れ・期限間近のトークンをハイライト
- モバイル対応でテキスト入力欄が大きめ
- 100% 無料、登録不要、追跡なし
方法 2:jwt.io を使う
jwt.io(Auth0 提供)は人気の JWT プレイグラウンドです。トークンを貼り付けるとヘッダーとペイロードがデコードされ、秘密鍵を提供すれば署名の検証もできます。広く使われており、多くのライブラリのアルゴリズムに対応します。
方法 3:使い慣れた言語でデコードする
Node.js では `jsonwebtoken` ライブラリを使用:
```javascript const jwt = require('jsonwebtoken'); const decoded = jwt.decode('eyJhbGciOi...', { complete: true }); console.log(decoded.header); console.log(decoded.payload); ```
Python では `PyJWT` ライブラリを使用:
```python import jwt payload = jwt.decode("eyJhbGciOi...", options={"verify_signature": False}) print(payload) ```
`verify_signature: False` オプションは重要です — 署名を検証せずにデコードすることをライブラリに指示します。これは検査時にやりたいことです。
よくある質問
JWT をオンラインでデコードするのは安全ですか?
デコードは安全です。中身は秘密ではなく、Base64URL でエンコードされているだけです(暗号化ではない)。ただし、本番環境のトークンに機密データが含まれる可能性がある場合は、信頼できないサービスに貼り付けないでください。UtilBoxx のデコーダーはブラウザ内でローカルに動作するので、トークンは端末から出ません。
デコードした JWT は信頼できますか?
いいえ。デコードはクレームを表示するだけで、署名は検証しません。トークンはデコードできても正当であるとは限りません。クレームを信頼する前に、必ず発行者の秘密鍵または公開鍵で署名を検証してください。
デコードと検証の違いは?
デコードは内容を読みます。検証は暗号鍵を使ってトークンが信頼できる発行者によるもので、改竄されていないことを確認します。ローカル検査にはデコードで十分です。セキュリティ判断には検証が必要です。
JWT にはどんなクレームがよく含まれますか?
標準クレームには `iss`(発行者)、`sub`(サブジェクト)、`aud`(オーディエンス)、`exp`(有効期限)、`iat`(発行時刻)、`nbf`(発効時刻)があります。カスタムクレームは `role`、`email`、`user_id` などアプリごとに異なります。
結論
JWT のデコードは開発者の日常業務です。高速でプライベートなブラウザ内体験には UtilBoxx の JWT デコーダー をブックマークしておくと最も手軽です。