言語選択

JWTデコーダー:ヘッダーとペイロードを即時解析

JWTをブラウザ内で安全にデコード。有効期限や発行時刻を人間可読形式で表示し、コピーも簡単。

Mehmet Demiray 公開日 更新日
共有
exp、iat、nbfクレームを読み取り可能な日付に変換します

JWTの構造を理解する

JSON Web Token(JWT)は、認証や情報交換に広く使われる標準フォーマットです。JWTは「ヘッダー.ペイロード.署名」という3つの部分から構成され、それぞれがピリオド(.)で区切られています。これら3つの部分はすべてBase64URLエンコードされており、人間が直接読むことはできませんが、デコードすれば元のJSON形式に戻せます。JWTデコーダーを使えば、ブラウザ上でこのデコード処理を安全かつ迅速に行えます。たとえば、ヘッダーには使用された署名アルゴリズム(例:HS256やRS256)やトークンの種類(typ)が記述されており、ペイロードにはユーザーIDや有効期限などのクレームが含まれます。重要なのは、JWTデコーダーは署名を検証せず、単にエンコードされた内容を可読化するだけだということです。したがって、デコード結果を信用してはいけません。署名の検証には秘密鍵または公開鍵が必要ですが、JWTデコーダーはそのような処理を行わず、トークンはブラウザ内にとどまります。Base64URLの仕組みを詳しく知りたい場合は、Base64デコードのページも参考になります。

JWTの標準クレームとは

JWTのペイロードには、任意のカスタムデータだけでなく、RFC 7519で定義された「標準クレーム」が含まれることがよくあります。代表的なものに「iss(issuer)」「sub(subject)」「aud(audience)」「exp(expiration time)」「iat(issued at)」「nbf(not before)」があります。「iss」はトークンを発行したサービスを示し、「sub」は対象ユーザーを表します。「aud」はこのトークンがどのクライアント向けかを指定し、ミスマッチすると認証エラーになります。「exp」は有効期限のUnixタイムスタンプで、2025年1月1日 のように人間が読める形式に変換できます。「iat」は発行時刻、「nbf」はその時刻以降でなければ使用できないことを意味します。JWTデコーダーはこれらのタイムスタンプを自動で日本標準時(JST)に変換し、開発者が直感的に理解できるように表示します。たとえば、exp: 1735689599 は「2024年12月31日 23:59:59 JST」と表示されます。これらのクレームを正しく設定・確認することで、API認証のトラブルを未然に防げます。さらにJSONの整形が必要な場合は、JSON整形ツールも併用できます。

JWTのデコードと検証の違い

JWTデコーダーを使う際、最も誤解されやすい点は「デコード=検証ではない」ということです。JWTはBase64URLエンコードされているため、誰でもヘッダーやペイロードの内容を読み取れます。しかし、それが信頼できるかどうかは別問題です。署名(signature)は、ヘッダーとペイロードの内容が改ざんされていないことを保証するために存在します。JWTデコーダーは署名を検証せず、単にエンコードされたテキストをJSONに戻すだけです。つまり、悪意のある第三者が偽のトークンを作成しても、JWTデコーダーはそれを「正しくデコード」してしまう可能性があります。実際のアプリケーションでは、サーバー側で秘密鍵や公開鍵を使って署名を検証し、トークンの真正性を確認する必要があります。JWTデコーダーはあくまでデバッグや学習のためのツールであり、本番環境でのトークン検証には使えません。トークンの内容を確認する際は、決して機密情報を含む本番トークンを不用意に扱わないよう注意してください。Base64エンコードの逆変換について詳しくは、Base64エンコードのページをご覧ください。

JWTを使った認証トラブルのデバッグ方法

API連携中に「401 Unauthorized」エラーが発生した場合、JWTの内容を確認するのが第一歩です。JWTデコーダーを使えば、トークンの有効期限(exp)、発行元(iss)、対象クライアント(aud)などを即座にチェックできます。よくある問題の一つは、トークンの有効期限切れです。たとえば、現在時刻が 2024年6月15日 なのに exp が 2024年6月15日 であれば、すでに無効です。もう一つは「audience mismatch」で、フロントエンドが「web-app」として登録されているのに、トークンの aud が「mobile-app」になっているケースなどです。また、サーバーとクライアントの時刻にずれ(クロックスキュー)があると、nbfexp の判定が誤る可能性があります。日本国内ではNTPサーバー(例:ntp.nict.jp)を使って時刻同期を行うのが一般的です。JWTデコーダーはこれらのタイムスタンプをJSTで表示するため、開発者が直感的に問題を特定しやすくなります。ただし、デコード結果は参考情報にすぎず、最終的な判断はサーバー側の検証ロジックに委ねられます。JSONの構造を整理したい場合は、JSON整形機能も活用しましょう。

JWTデコーダーに関するよくある質問

JWTデコーダーについて、開発者から寄せられる代表的な質問を紹介します。まず、「JWTをデコードすることは検証と同じですか?」という問いに対しては「いいえ」と答えます。デコードは内容の可読化にすぎず、署名の正当性は確認しません。次に、「トークンの有効期限をどう確認すればいいですか?」という質問には、JWTデコーダーにトークンを貼り付けると、exp クレームが自動で日本時間に変換されて表示されるため、それを見るだけで確認できます。また、「本番環境のトークンをここに貼っても安全ですか?」については、トークンは一切サーバーに送信されず、ブラウザ内でのみ処理されるため、技術的には安全です。ただし、機密情報がペイロードに含まれている場合、画面共有中や他人のPCで操作すると漏洩リスクがあるため、注意が必要です。最後に、「トークンがデコードできないのはなぜですか?」というケースでは、JWTが正しい3セグメント形式(ヘッダー.ペイロード.署名)になっていないか、Base64URL文字セット外の文字が混入している可能性があります。その場合は、Base64デコードツールで個別に各セグメントを試すと原因が特定しやすいです。

最もよくいただく質問

JWTデコーダーでトークンをデコードするのと検証するのは同じですか?

いいえ、異なります。JWTデコーダーは署名を検証せずにヘッダーとペイロードを単にデコードするだけです。つまり、内容は誰でも読めますが、その信頼性や改ざんの有無は確認できません。検証には秘密鍵や公開鍵が必要で、これはサーバーサイドで行うべき処理です。詳しくはBase64デコードの仕組みもご参照ください。

自分のJWTがいつ失効するか確認するにはどうすればいいですか?

JWTデコーダーにトークンを貼り付けると、「exp」(有効期限)クレームが自動的に人間が読める日時に変換されて表示されます。たとえば「exp: 1735689600」は「2025年1月1日 09:00:00 JST」のように表示されます。これにより、トークンがまだ有効かどうかをすぐに判断できます。

本番環境で使っているJWTをこのツールに貼り付けても安全ですか?

はい、安全です。JWTデコーダーはすべての処理をブラウザ内で完結させ、トークンを外部サーバーに送信しません。ただし、デコードされた内容は機密情報を含む可能性があるため、他人のいる場所や共有PCでは注意が必要です。また、デコード=信頼可能ではない点にもご留意ください。

JWTを貼り付けてもデコードに失敗するのはなぜですか?

JWTは「ヘッダー.ペイロード.署名」の3部構成で、各パートがBase64URLエンコードされている必要があります。ピリオドの数が違ったり、文字列に改行や余計なスペースが含まれていると失敗します。また、Base64URLではなく通常のBase64でエンコードされたトークンもエラーになります。入力値を確認し、必要ならBase64エンコードツールで正しくフォーマットしてください。

「iat」や「nbf」って何を表しているんですか?

「iat」(Issued At)はトークンの発行時刻、「nbf」(Not Before)はそのトークンを使えるようになる時刻を示します。JWTデコーダーではこれらも自動的に日本標準時(JST)の読みやすい形式で表示されます。たとえば、現在時刻が「nbf」より前だと、そのトークンはまだ使用できません。認証エラーの原因として見落とされがちなので、デバッグ時に要チェックです。

デコード結果を他の人と共有したいのですが、どうすればいいですか?

JWTデコーダーのヘッダーやペイロード表示欄の横にある「コピー」ボタンを押すと、整形済みのJSONがクリップボードにコピーされます。それをチャットやメールに貼り付けて共有できます。ただし、機密情報(メールアドレス、ユーザーIDなど)が含まれる場合があるため、社内のみや信頼できる相手に限定して共有してください。

JWTデコーダーとJSON整形ツールの違いは何ですか?

JWTデコーダーはJWT専用で、Base64URLデコードと標準クレーム(exp, iatなど)のタイムスタンプ変換を自動で行います。一方、JSON整形ツールはすでにJSON形式のテキストを読みやすくインデントするだけです。JWTをそのままJSON整形ツールに貼っても、Base64エンコードされたままなので内容は読めません。