JWT.io:何もインストールせずに、どんな認証トークンも即座にデコード

· nologin.tools
tools review development security

Hero image

多くの開発者が意外に思う事実があります。認証サーバーから受け取るJWTは、デフォルトでは暗号化されていません。あくまで署名されているだけです。つまり、ヘッダーとペイロードは誰でも読めるプレーンなBase64エンコードのテキストです。トークンの完全性を保証しているのは署名だけであり、それが改ざんされていないことを証明しています。

これを知ると、すべての開発者がJWTの中身をすぐに確認できる手段を持っているはず、と思うかもしれません。しかし現実には、深夜2時に謎めいた 401 Unauthorized エラーが出ると、多くの人は新しいファイルを開いて atob() を書き、ドットで分割してJSONを手動でパースしようとします。もっと速い方法があるのに、です。

JWT.io はまさにその「速い方法」です。一つのことに特化しているツールです。JWTをペーストすると、即座に内容を確認し、署名を検証し、構造を理解できます。アカウント不要、インストール不要、デコードはすべてブラウザ内で完結します。

JSON Web Tokenとは何か

ツールを見る前に、実際に何をデコードしているのかを理解しておきましょう。

JSON Web Tokenとは、2者間でクレーム情報を表現するためのコンパクトなURL安全な文字列です。実際には、ログイン後にサーバーから受け取るもので、以降のすべてのリクエストに身元証明として含めます。ほとんどのREST APIとシングルページアプリで使われています。

JWTはドットで区切られた3つのパートで構成されています。

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkphbmUgRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
  • ヘッダー(1番目):アルゴリズムとトークンタイプ — 例:{"alg": "HS256", "typ": "JWT"}
  • ペイロード(2番目):実際のクレーム — ユーザーID、ロール、有効期限など、アプリが持たせるあらゆる情報
  • 署名(3番目):最初の2つのパートに対するHMACまたはRSA署名

ヘッダーとペイロードはBase64URLエンコードされているだけで、暗号化はされていません。トークンを傍受した人は誰でもこの2つのパートを読めます。改ざんを防いでいるのは署名です。秘密鍵なしには有効な署名を偽造できません。

だからこそ、開発やデバッグ中にJWTをすばやく読めることが重要なのです。ペイロードに正しいクレームが含まれているか、有効期限(exp)のタイムスタンプを確認し、アルゴリズムがバックエンドの期待と一致しているかを検証したいからです。

JWT.io の使い方

jwt.io を開くと、直接デバッガーに入ります。ランディングページも、マーケティング文句も、サインアップの促しもありません。左側にはエンコードされたトークンを貼り付ける大きなテキストエリアがあり、右側にはデコードされたヘッダー、ペイロード、署名検証セクションを示す3つのカラーパネルがあります。

左のパネルにJWTをペーストすると、デコードされた出力が即座に表示されます。パネルは色分けされています。ヘッダー部分は赤/ピンク、ペイロードは紫、署名は青で、入力のドット区切りの各セグメントの色と対応しています。

ペイロードパネルには、クレームが見やすいJSON形式で表示されます。

{
  "sub": "user_8f3a2c",
  "email": "[email protected]",
  "role": "admin",
  "iat": 1742568000,
  "exp": 1742654400
}

署名の検証には、HMACアルゴリズム(HS256など)の場合は秘密鍵を入力し、RS256やES256の場合は公開鍵をペーストします。ツールは「Signature Verified」または「Invalid Signature」のインジケーターを表示します。これはサービス間の連携作業で本当に役立ちます。期待した鍵でトークンが署名されたかを確認するのが、数秒で完了します。

クライアントサイド処理がなぜ重要か

認証トークンをランダムなWebツールに貼り付けるのは、現実のセキュリティリスクです。多くの「オンラインツール」はトークンをサーバーに送信してログに記録し、場合によっては外部に露出させます。開発者が慎重になるのは正しい判断です。

JWT.io は違います。すべてのデコードと検証はJavaScriptを使ってブラウザ内で実行されます。トークンをデコードしても、外部サーバーにデータは送信されません。自分で確認することもできます。ブラウザのネットワークタブを開き、トークンをペーストして見てみましょう。ネットワークリクエストは一切発生しません。

これはマーケティングの主張ではなく、検証可能な動作です。ツールはオープンソースであり、クライアントサイド処理のアーキテクチャにより、トークンは自分のマシン上に留まります。

ただし、実用的なセキュリティの注意点も覚えておいてください。共有されたまたは信頼できないコンピューターでは、機密性の高いユーザーデータを含む本番環境のトークンは貼り付けないようにしましょう。開発用、ステージング用、テスト用のトークンであれば、JWT.io は完全に安全に使えます。

サポートされているアルゴリズム

JWT.io は実際のシステムで見かけるアルゴリズムの全範囲をサポートしています。

アルゴリズムタイプ主な用途
HS256 / HS384 / HS512HMAC + SHA単一サービスのアプリ、共有秘密鍵
RS256 / RS384 / RS512RSA署名分散システム、公開鍵検証
ES256 / ES384 / ES512ECDSAコンパクトなトークン、IoT
PS256 / PS384 / PS512RSA-PSS高いセキュリティ要件

HMACアルゴリズムでは共有秘密鍵を提供して署名を検証します。非対称アルゴリズム(RS*、ES*、PS*)ではPEM形式の公開鍵をペーストします。ツールが解析を処理し、結果を即座に表示します。

実際のユースケース

認証失敗のデバッグ:ユーザーが保護されたルートにアクセスできないと報告したとき、最初の質問はたいてい「彼らのトークンは実際に何を言っているか?」です。JWT.io でデコードするのに3秒かかりません。トークンが期限切れかどうか、ロールクレームが正しく設定されているか、オーディエンス(aud)がAPIの期待と一致するかを確認できます。

インテグレーションテスト:Auth0、Okta、Cognito、KeycloakなどのサードパーティIDプロバイダーと連携する場合、彼らが発行するトークンには自分のユーザーモデルにマッピングする必要があるクレームが含まれているかもしれません。サンプルトークンをデコードすることで、コードを書く前にどのフィールドが存在するかを正確に把握できます。

学習とオンボーディング:認証を始めたばかりの開発者にとって、JWT.io は優れた教材です。エンコードされた文字列の横にデコードされたペイロードが表示されることで、Base64URLエンコードが抽象的なものから具体的なものになります。初めて使ったときに「なるほど!」となるツールの一つです。

クイックサニティチェック:トークン生成コードへの変更をデプロイする前に、サンプル出力をJWT.io に貼り付けて、ペイロードに正しいフィールドが正しい形式で含まれているかを確認しましょう。

より重度なAPI作業——リクエストの作成、エンドポイントのテスト、コレクションの管理——を行うチームには、Hoppscotch がJWT.io と相性よく使えます。Hoppscotch で認証エンドポイントからトークンを取得し、JWT.io でクレームを確認してから、そのトークンを後続のリクエストに使うという流れです。2つのツールはブラウザのみのワークフローで互いを補完し合います。

アプローチの比較

JWT.io が登場する前(または開発者がそれを知らない場合)、いくつかの代替手段が登場します。

手動のBase64デコード:トークンを . で分割し、ブラウザコンソールで各セグメントに atob() を実行して、JSONをパースします。機能はしますが時間がかかり、URLセーフなBase64のバリアントの処理がやや面倒で、署名検証もできません。

クイックスクリプトの作成:JWTライブラリをインポートして検証呼び出しを書くのは、本番コードには適していますが、クイックデバッグセッションにはやり過ぎです。ローカル環境もセットアップする必要があります。

他のオンラインデコーダー:いくつか存在しますが、署名を検証できないもの、アルゴリズムの全範囲をサポートしていないもの、またはトークンをバックエンドに送信するものが多いです。JWT.io の全アルゴリズムサポート、クライアントサイド処理、明確なビジュアル出力の組み合わせは、なかなか代替が難しいです。

汎用エンコードとデータ変換タスク——Base64、16進数、URLエンコーディング、その他数百種類——には、IT Tools をJWT.io と一緒にブックマークする価値があります。同様にログイン不要のブラウザベースのツールで、日常的な開発作業に役立つ幅広いユーティリティを備えています。

JWT仕様について

JWTは RFC 7519 で定義されており、署名アルゴリズムは RFC 7515 (JWS) でカバーされています。特定のクレームが存在する理由やバイトレベルでエンコードがどのように機能するかを理解したい場合は、これらのドキュメントが権威ある情報源です。

仕様が明確にしていることが一つあります。JWTはフォーマットであり、セキュリティプロトコルではありません。JWTを使っても、自動的に認証が安全になるわけではありません。短い有効期限、適切な署名検証、alg フィールドの慎重な扱い(アルゴリズム混乱攻撃を防ぐため)は、すべて引き続き自分の責任です。JWT.io はトークンをすばやく確認・検証するのに役立ちますが、重要なバグを防ぐのは仕様を理解していることです。

デバッガー以外の機能

JWT.io のサイトには、すべての主要プログラミング言語——Node.js、Python、Go、Java、Ruby、PHP、.NETなど——のJWTライブラリリストも掲載されています。各ライブラリには、サポートするアルゴリズムに関する検証済み情報が含まれています。新しいプロジェクトのライブラリを選ぶ際、このリファレンスページがドキュメントサイトへの往復を省いてくれます。

デバッガー自体がメインの魅力ですが、ライブラリディレクトリはJWT処理をゼロから設定する際の便利なセカンダリリソースです。


次に不透明なトークン文字列を見て、中に何が入っているか気になったときは、jwt.io に貼り付けてみてください。デコードされた出力は通常10秒以内に答えを教えてくれます。アカウント不要、何もインストール不要、サーバーへの送信も一切ありません。

トークンベース認証と分散システムへの移行が進む中——共有セッションなしで信頼を確立する必要がある環境で——JWT.io のようなツールは、たまに参照する程度のものから、日常のツールキットの一部へと変わりつつあります。今すぐブックマークしておきましょう。思った以上に早く使うことになるはずです。