JWT デコーダ
JSON Web Token をデコードして、ヘッダーとペイロードの内容を確認します。
JSON Web Token (JWT) とは? なぜデコーダが必要なのか?
JSON Web Token (JWT) は、2 者間での情報の受け渡しをコンパクトかつ URL セーフに行うための標準的な手段です。JWT 内の情報は JSON オブジェクトとして表現され、デジタル署名(JWS)や完全性保護(MAC)、あるいは暗号化(JWE)によって、その内容が改ざんされていないことを保証したり、機密性を保ったりすることができます。
一般的に JWT は、ドット (.) で区切られた 3 つの部分で構成されます。ヘッダー(Header)、ペイロード(Payload)、そして署名(Signature)です。ヘッダーには署名に使用されるアルゴリズム(HS256 や RS256 など)が定義され、ペイロードには送信される実際のデータ(ユーザー ID や権限など)である「クレーム」が含まれます。そして署名によって、トークンが途中で改ざんされていないことを保証します。JWT は Base64Url でエンコードされているだけで、デフォルトでは暗号化されていません。つまり、トークンを見ることができれば、誰でもその中のデータを読み取ることができます。開発において JWT デコーダが不可欠なのはこのためです。デコーダを使用することで、エンジニアはトークンの内容を素早く検査し、正しいユーザー情報、有効期限、および権限ロールが送信されているかを確認できます。ProUtil の JWT デコーダは、機密性の高いトークンデータがデバイスから外部へ漏れるリスクのない、安全なクライアントサイド環境を提供します。
JSON Web Token を検査・デバッグする方法
トークンのコピー: Authorization ヘッダーやブラウザのストレージから、JWT 文字列全体をコピーします。
トークンの入力: エンコードされた文字列を 「エンコードされたトークン」 フィールドに貼り付けます。ProUtil の UI は長い暗号化文字列も扱えるよう最適化されています。
ヘッダーの即時分析: Header セクションを確認し、署名アルゴリズム(例: HS256, RS256)やトークンの種類を特定します。
ペイロードの検査: デコードされた Payload を確認します。ここでユーザーの属性、発行者 (iss)、対象者 (aud)、およびカスタムクレームを検証できます。
有効期限 (exp) のチェック: ペイロード内の 「exp」 クレームを探し、トークンがまだ有効か、あるいは期限切れかを確認します。
署名の構造確認: 本ツールはデコーダですが、署名部分(第 3 セグメント)を識別することで、トークンの完全性構造を理解するのに役立ちます。
可読性の高い整形: 整形された JSON 表示を活用して、複雑に入れ子になったクレームも簡単に読み取ることができます。
機密データの保護: JWT ペイロードはこのようなツールで簡単にデコードできるため、パスワードや機密性の高い秘密情報を入れないように注意してください。
トークンのエラー特定: トークンが途切れていたり形式が正しくない場合、エラーパネルに即座にフィードバックが表示されます。
プライバシー重視のデバッグ: 「コピー」 ボタンを使用して、デコードされたデータの一部を安全にローカルのドキュメントやデバッグログに移動できます。
エンジニアのための高度な JWT 検査機能
JWT デコードの例
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoyMDI2fQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
{
"sub": "1234567890",
"name": "John Doe",
"iat": 2026
}JWT のセキュリティと実装における一般的なエラー
不適切なトークン形式
有効な JWT は、3 つの部分を分けるドット(.)が正確に 2 つ含まれている必要があります。そうでない場合は標準的な JWT ではありません。
Base64Url のパディングエラー
JWT では末尾の 「=」 パディングを省略します。手動で追加したり、トークンが途切れたりすると、デコードに失敗します。
機密情報の漏洩
ペイロードは暗号化ではなくエンコードされているだけなので、個人情報 (PII) や秘密情報を入れるのは重大なリスクです。
有効期限 (exp) の期限切れ
有効期限を常に確認してください。期限切れのトークンを使用すると、アプリケーションで 「401 Unauthorized」 エラーが発生します。
アルゴリズムの混乱
「alg」 ヘッダーがサーバーの期待するアルゴリズムと一致しているか確認してください。アルゴリズム置換攻撃(Algorithm Substitution Attack)を防ぐために重要です。
None アルゴリズムの脆弱性
アルゴリズムに 「none」 が指定されているトークンには注意してください。現代のシステムはこれらを拒否すべきです。
エキスパートの視点:JWT に関するよくある質問
Q.オンラインで JWT をデコードしても安全ですか?
ProUtil を使用すれば安全です。当デコーダは、クライアントサイドの JavaScript を使用してブラウザ内でのみ動作します。トークンがサーバーや第三者に送信されることはありません。
Q.HS256 と RS256 の違いは何ですか?
HS256(SHA-256 を用いた HMAC)は共通鍵(対称)アルゴリズムで、署名と検証に同じ秘密鍵を使います。RS256(SHA-256 を用いた RSA 署名)は非対称アルゴリズムで、署名に秘密鍵、検証に公開鍵を使い、分散システムではより安全です。
Q.JWT の内容を書き換えて、再署名することはできますか?
ペイロードのデコードと書き換え自体は可能ですが、そうすると 「署名(Signature)」 が無効になります。正しく再署名するには、発行者が持つ元の秘密鍵が必要です。これにより改ざんが防止されます。
Q.JWT は暗号化されていますか?
デフォルトではいいえ。標準的な JWS トークンは、Base64Url エンコードと署名のみが行われています。誰でも中身を見ることができます。内容を隠す必要がある場合は、JWE(JSON Web Encryption)を使用します。
Q.なぜ JWT は Base64 ではなく Base64Url を使うのですか?
`+` や `/` といった文字を `-` や `_` に置き換え、パディング(`=`)を取り除くためです。これにより、特別なエンコードなしで URL やファイル名の中で安全に使用できるようになります。
Q.JWT に保存してはいけないものは?
パスワード、クレジットカード番号、マイナンバーなどの極めて機密性の高い情報は決して保存しないでください。ペイロードは誰でもデコード可能であることを忘れないでください。
Q.JWT の有効期限はどう扱えばいいですか?
ペイロード内の `exp` クレームで期限を指定します。アプリケーションは現在時刻と比較し、期限を過ぎていれば拒否すべきです。「リフレッシュトークン」の使用が標準的なセッション更新の方法です。
Q.JWT における 「クレーム(Claim)」 とは何ですか?
主体(ユーザーなど)に関する主張・情報を指します。標準的なクレームには `sub` (主体)、`iss` (発行者)、`exp` (有効期限) などがあります。独自のカスタムクレームを追加することも可能です。
Q.JWT のペイロードが大きいとパフォーマンスに影響しますか?
はい。JWT は通常、リクエストのたびに Authorization ヘッダーとして送信されるため、サイズが大きいとネットワークのオーバーヘッドが増加します。必要なデータのみを含め、コンパクトに保つべきです。
Q.一度発行した JWT を無効化(失効)できますか?
JWT はステートレスなため、基本的には有効期限が切れるまで有効です。途中で無効化するには、サーバー側で「ブラックリスト」などを管理する必要がありますが、これは JWT のステートレスな利点を少し損なうことになります。
Q.JWT は LocalStorage と Cookie のどちらに保存すべきですか?
LocalStorage は簡単ですが XSS のリスクがあります。HttpOnly かつ Secure な Cookie は XSS に強いですが CSRF の考慮が必要です。用途に応じたセキュリティ設計が求められます。
Q.署名の検証を忘れるとどうなりますか?
検証を行わないと、攻撃者が `admin: true` のような勝手なクレームを含めた偽のトークンを作成でき、システムがそれを信じてしまうことになります。署名検証は JWT セキュリティにおいて最も重要なステップです。
Q.ヘッダーにある 「kid」 とは何ですか?
`kid` (Key ID) は、どの鍵で署名されたかを示す識別子です。鍵のローテーションを行っている場合や、複数の公開鍵(JWKS)を使用している場合に特に役立ちます。
Q.JWT のサイズに制限はありますか?
仕様上制限はありませんが、多くのサーバーやブラウザにはヘッダーサイズの制限(8KB〜16KB 程度)があります。これを超えるとリクエストが失敗する可能性があります。
Q.署名が 「Invalid(無効)」 と表示されるのはなぜですか?
トークンが改ざんされた、検証用の公開鍵/秘密鍵が間違っている、または転送中にデータが欠落・破損したなどが考えられます。
Q.ProUtil の JWT デコーダはオープンソースですか?
はい! ProUtil はオープンソースの開発者向けツール集です。コードは GitHub で公開されており、プライバシー重視の仕組みをどなたでもご確認いただけます。