JWT トークンをデコードしてクレームを安全に検査する方法
簡単な回答
JWT をデコードするには: トークンを JWT デコーダーに貼り付けると、ヘッダーとペイロードがフォーマットされた JSON として即座に表示されます。このツールは、Base64URL でエンコードされた部分をローカルでデコードします。トークンがブラウザーから離れることはありません。覚えておいてください: デコードすると内容だけが表示されます。署名は検証されません。
導入
JWT (JSON Web トークン) は、認証と情報交換に使用されるコンパクトで URL に安全なトークン形式です。 JWT には、header.payload.signature というドットで区切られた 3 つの部分があります。ヘッダーにはアルゴリズムとトークンの種類が指定され、ペイロードにはクレーム (ユーザー ID、ロール、有効期限) が含まれ、署名はトークンが改ざんされていないことを証明します。 JWT をデコードすると、デバッグのためにその内容を検査できますが、デコードでは信頼性が検証されません。このガイドでは、ブラウザーで JWT を安全にデコードする方法を説明します。
ステップバイステップ
-
JWT デコーダー ツールを開く
JWT デコーダー ツール ページに移動します。このツールは、任意の JWT 文字列 (ドットで区切られた 3 つの Base64URL エンコードされた部分) を受け入れます。
-
JWT トークンを貼り付けます
JWT を入力フィールドに貼り付けます。典型的な JWT は次のようになります: eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ1c2VyMSJ9.signature。このツールは 3 つのパーツを自動検出します。
-
デコードされたヘッダーを確認します
ツール Base64URL は最初の部分をデコードし、JSON として表示します。通常、ヘッダーには「alg」(HS256 などのアルゴリズム)と「typ」(タイプ、通常は「JWT」)が含まれます。
-
デコードされたペイロード (クレーム) を確認します。
このツールは 2 番目の部分をデコードし、クレームをフォーマットされた JSON として表示します。一般的なクレームには、「sub」 (件名/ユーザー ID)、「iat」 (発行日)、「exp」 (有効期限)、および「role」 (ユーザーの役割) が含まれます。
-
署名を確認する (3 番目の部分)
ツールは署名部分を表示します。注: デコードでは署名は検証されません。検証するには、署名キーと検証ライブラリが必要です。サーバー側の署名を検証せずに、JWT の主張を決して信頼しないでください。
例
単純な JWT をデコードする
入力: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ1c2VyMSIsIm5hbWUiOiJBbGljZSIsImlhdCI6MTY5MzUyNjQwMH0.signature
出力: Header: {"alg":"HS256","typ":"JWT"}
Payload: {"sub":"user1","name":"Alice","iat":1693526400}
JWT 有効期限の主張あり
入力: eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTY5MzYxMjgwMH0.sig
出力: Header: {"alg":"HS256"}
Payload: {"sub":"admin","exp":1693612800}
よくある問題
- デコードと検証の混同 — JWT をデコードすると、その内容が読み取られるだけです。トークンが本物であることを証明するものではありません。署名キーを使用してサーバー側の署名を必ず検証してください。
- 期限切れのトークンを信頼する - 「exp」クレームを確認し、期限切れのトークンを拒否します。 「exp」値は、秒単位の Unix タイムスタンプです。
- Base64 と Base64URL —JWT は Base64URL エンコードを使用します (パディングなし、+ と / の代わりに - と _)。標準の Base64 デコーダーは JWT パーツで失敗します。
- ペイロード内の機密データ —JWT ペイロードは、トークンを持っている人なら誰でも読み取ることができます。パスワード、クレジット カード番号、その他の秘密をペイロードに保存しないでください。
ヒント
- 主張を信頼する前に、必ずサーバー側で JWT 署名を検証してください。デコードだけでは認証ではありません。
- 「exp」(有効期限) および「nbf」(以前ではない) クレームをチェックして、トークンが現時点で有効であることを確認します。
- 長時間セッションの場合は、有効期間の短いトークン (15 ~ 60 分) をリフレッシュ トークンとともに使用します。トークンが漏洩した場合の被害を最小限に抑えます。
- 安全なローカル デバッグには、JWT デコーダを使用してください。トークンがブラウザから離れることはありません。