JWT デコーダー
JWT を貼り付けると、ヘッダ・クレーム・失効の有無を表示します。トークンはブラウザ内にとどまります。送信先のサーバーは存在せず、署名鍵を求めることもありません。
クレームをそのまま並べるのではなく解説
標準クレームを人間が読める形にします。`exp` `iat` `nbf` は ISO 形式のタイムスタンプと「あと約 2 時間」「約 3 日前」といった相対表記で示し、失効しているトークンは明示します。`iss` `sub` `aud` `jti` も生の JSON ペイロードと並べて表示するので、両方の見え方を同時に確認できます。
署名は意図的に検証しません
署名の検証には共有シークレットか公開鍵が必要です。シークレットの貼り付けを求めるサイトは、インフラの外に出してはいけないものを要求していることになります。このツールはデコードのみを行います。検証は鍵がすでに存在する自分のコードや CLI で行ってください。
デコードで分かること・分からないこと
デコードで分かるのはトークンが何を主張しているかであって、その主張が正しいかではありません。誰でも任意のペイロードでトークンを作れます。401 の調査中にユーザー・スコープ・有効期限を確認するデバッグ用途として使い、信頼の判断はサーバー側の検証に任せてください。
よくある質問
トークンはサーバーに送信されますか?
いいえ。貼り付けた内容がブラウザの外に出ることはありません。ページは小さな JavaScript を読み込むだけで、計算はすべて手元の端末で行われます。送信先のサーバーそのものが存在しません。 JWT は有効な認証情報そのもので、持っている人は失効までそのユーザーとして振る舞えます。送信するサイトに貼り付ければ実害のある事故になります。このページには送信する手段がありません。
なぜ署名を検証しないのですか?
検証にはシークレットか公開鍵が必要で、第三者のページがそれを受け取るべきではないからです。デコードは中身を見るための操作、検証は鍵のある場所(自社のバックエンドや手元の CLI・ライブラリ)で行うべき操作です。
「失効」はどう判定していますか?
`exp` クレームは秒単位の UNIX タイムスタンプです。その時刻が端末の時計より過去であれば失効と表示します。端末の時計がずれていれば判定もずれます。サーバー側の時計がずれている場合も同様で、原因不明の 401 のよくある理由です。
JWT は暗号化されていますか?
一般的な署名付き JWT(JWS)は暗号化されていません。ヘッダとペイロードは Base64URL でエンコードされているだけで、トークンを持つ人は誰でも読めます。署名は改ざんを防ぐもので、閲覧を防ぐものではありません。機密情報をペイロードに入れないでください。秘匿が必要なら暗号化された JWE を使います。