JWTデコード
JWTはドットで区切られたヘッダー・ペイロード・署名の3つの部分でできています。このツールはヘッダーとペイロードをデコードし、exp・iat・nbfをUTCと現地時間で表示します。署名の検証は行いません。
使い方
- トークンを入力欄に貼り付けます。先頭のBearer、引用符、改行は無視されます。
- ヘッダーとペイロードを整形済みのJSONで確認します。それぞれ「コピー」でコピーできます。
- バッジと時刻クレームを確認します。exp、iat、nbfはUTCとローカル時刻で表示され、今からどれくらい前か先かもわかります。
- 手元にトークンがなければ「サンプルを読み込む」で架空のトークンを試せます。
計算方法
JWTはドットで区切られた3つの部分、ヘッダー、ペイロード、署名からなります。ヘッダーとペイロードはJSONをbase64urlでエンコードしたもので、base64の+と/を-と_に置き換え、=のパディングを省いた形式です。ツールはこのエンコードを戻し、バイト列をUTF-8として読んでインデント付きのJSONで表示します。
exp、iat、nbfは1970年1月1日UTCからの秒数です。expは失効時刻、iatは発行時刻、nbfは有効になる最も早い時刻です。バッジは標準のルールに従い、現在時刻がexp以降なら期限切れ、nbfより前ならまだ有効でない、と判定します。現在時刻には端末の時計を使います。
署名はトークン内の文字列をそのまま表示します。このツールは署名を検証しません。デコードはトークンだけでできますが、署名の検証には秘密鍵か公開鍵が必要で、それはサーバー側だけで行うべきことです。
主なクレーム
| クレーム | 意味 |
|---|---|
| iss | 発行者: トークンを作った主体 |
| sub | サブジェクト: トークンの対象、多くはユーザーID |
| aud | オーディエンス: トークンの受け手 |
| exp | 有効期限。1970年UTCからの秒数 |
| nbf | Not Before: この時刻より前は無効 |
| iat | 発行日時: トークンが作られた時刻 |
| jti | トークンID: このトークン固有の識別子 |
よくある質問
署名は検証されますか?
されません。ヘッダーとペイロードをデコードするだけです。JWTは誰でもデコードでき、好きな中身で作ることもできるので、デコードできたからといって信用してはいけません。署名は正しい鍵を使ってサーバーで検証してください。
トークンはどこかに送信されますか?
いいえ。デコードはブラウザ内で行い、何もアップロードしません。それでも本物のトークンはパスワードと同じように扱い、信頼できないツールに本番環境の有効なトークンを貼り付けないでください。
さっきまで使えたのに「期限切れ」と出ます
バッジはexpをこの端末の時計と比べています。端末の時計がずれていたり、サーバーが時刻のずれを少し許容していたりすると、短時間だけ判定が食い違うことがあります。
alg が none とはどういう意味?
署名のない、保護されていないトークンを表します。署名なしトークンを意図的に受け付ける場合を除き、サーバーは拒否しなければなりません。そうした例はまれです。このツールはnoneを見つけると警告を出します。
ペイロードは暗号化されていますか?
いいえ。通常の署名付きJWTはエンコードされているだけなので、持っている人なら誰でもペイロードを読めます。秘密情報は入れないでください。暗号化されたトークン(JWE)は5つの部分からなり、このツールでは読めません。