JWTデコード
ブラウザ内処理ファイルはアップロードされませんこの処理はブラウザ内で完結します。ファイルはどこにも送信されません。
JWTを貼ると、ヘッダーとペイロードを整形して表示し、発行日時と有効期限を読める形に直します。署名の検証はできないので、そのことも画面に出しています。
入力
⚠️ この道具は署名を検証しません(発行者の鍵が必要で、ここにはありません)。中身が読めることは、そのトークンが正しいことを意味しません。
「Bearer 」が付いたままでも読み取ります。
⚠️ 本番のトークンを貼るのは避けてください。この道具は送信しませんが、値そのものが資格情報で、画面共有や録画、ブラウザの履歴に残ります。
出力
トークンを貼ると、ヘッダと本体の中身、有効期限の判定がここに出ます。
関連するツール
ツール一覧特長
- 期限を日時で見せる
- exp・iat・nbf はUnix秒で入っているため、そのままでは読めません。日時に直したうえで、いまの時刻と突き合わせて「期限切れ」「まだ有効」を判定します。
- 日本語のクレームが化けない
- base64を解いた結果はバイト列で、UTF-8として解き直さないと日本語が壊れます。名前や所属が入ったトークンでも、そのまま読める形で出します。
- できないことを隠さない
- 署名の検証には発行者の鍵が必要で、この道具は持っていません。「読めた=正しい」ではないことを、結果より前に常に表示します。alg が none のトークンには追加で警告を出します。
使い方
トークンを貼る
「Bearer 」が付いたままでも構いません。取り除いて読みます。
中身を読む
ヘッダーとペイロードが整形されて出ます。日時のクレームは下の欄で読める形に直されます。
期限を確かめる
有効期限があれば、いまの時刻と比べた状態が上に出ます。
用語と読み方
- 3つの部分
- ピリオドで区切られた「ヘッダー・ペイロード・署名」です。前の2つはただのbase64urlなので、誰でも読めます。秘密にしたい情報をペイロードに入れてはいけないのはこのためです。
- exp / iat / nbf
- 順に、有効期限・発行日時・有効開始日時です。いずれもUnix秒(1970年1月1日からの秒数)で入っています。
- alg
- 署名の方式です。HS256は共通鍵、RS256は公開鍵方式。noneは「署名なし」で、受け取る側がこれを許すと誰でも偽造できます。
- sub / aud / iss
- 順に、そのトークンが指す相手(多くは利用者のID)、使ってよい宛先、発行した主体です。認証が通らないときは、まず aud と iss が受け取る側の設定と一致しているかを見ます。期限より先に、この2つの不一致で弾かれていることがよくあります。
- なぜbase64urlなのか
- JWTはURLやHTTPヘッダーに載ることを前提にしているためです。通常のbase64が使う「+」「/」「=」はURLの中で別の意味を持つので、それぞれ「-」「_」と省略に置き換えた変種を使います。手元のbase64変換で読めないことがあるのはこの違いによります。
- ヘッダーの kid
- 署名に使った鍵の名前です。発行者が複数の鍵を持ち回している場合、受け取る側はこの名前で使う鍵を選びます。鍵を入れ替える途中で認証が通らなくなったときは、ここが古い鍵を指していないかを確かめてください。
よくある質問
- トークンは送信されますか。
- されません。base64を解いてJSONにするだけの処理で、すべてブラウザの中で行われます。
- 本番のトークンを貼っても大丈夫ですか。
- この道具は送信しませんが、勧めません。JWTは資格情報そのもので、画面共有や録画、ブラウザの履歴に残ります。期限が切れたものか、検証用のものを使ってください。
- 署名が正しいかを確かめられますか。
- できません。発行者の鍵が必要で、鍵を預かる仕組みはここにありません。検証はトークンを受け取る側のサーバーで行うものです。
- 読めたのに認証が通りません。
- 読めることと有効であることは別です。期限切れ、対象(aud)や発行者(iss)の不一致、署名の不一致のいずれかを疑ってください。
- JWTの中身は暗号化されていないのですか。
- されていません。署名は「途中で書き換えられていないこと」を示すもので、「中身を隠すこと」ではありません。ヘッダーとペイロードはbase64urlを解けば誰でも読めます。隠したい値がある場合は、暗号化する別の仕様(JWE)を使うか、そもそもトークンに入れずにサーバー側で引く設計にしてください。
- ログアウトしたのに、そのトークンがまだ使えます。
- JWTは「発行した時点で有効期限まで有効」という作りで、あとから取り消す仕組みを持っていません。ログアウトで無効にしたい場合は、受け取る側が失効リストを持つか、有効期限を短くして更新用のトークンで回す設計が要ります。この性質は実装の不備ではなく、仕様上の前提です。
- 有効期限が切れているかを、ここで判定できますか。
- exp の値を人が読める日時として表示するので、現在時刻と比べれば分かります。ただし判定そのものは受け取る側のサーバーが行うもので、しかもサーバーの時計とお使いの端末の時計がずれていると結果が変わります。境目に近い場合は、この画面だけで結論を出さないでください。
スポンサーリンク