JSON Web Tokenをデコード
JSON Web Token(JWT)は、システム間でIDや権限情報を渡すために使われるコンパクトな文字列で、多くの場合、ログイン後にAuthorization: Bearerヘッダーとして使用されます。一見ランダムなテキストに見えますが、Base64URLでエンコードされた3つの部分、すなわちヘッダー、クレームを含むペイロード、そして署名で構成されています。このJWTデコーダーは、トークンを分割し、最初の2つの部分を読みやすいJSONにデコードし、重要なクレームについて説明します。デコードと検証はローカルで行われるため、あなたのトークンが外部に送信されることはありません。
主な機能
- ヘッダーとペイロードをデコードして整形表示。それぞれにコピーボタン付き。
- 時刻クレームの解説:
iat、nbf、exp、auth_timeをエポック秒からあなたのタイムゾーンの日付に変換して表示。 - 有効期限チェックにより、トークンが期限切れか、まだ有効期間が始まっていないかを一目で確認可能。
- ブラウザのWeb Crypto APIを使用した、HS256、HS384、HS512のHMAC署名検証。
- ページ読み込み後はオフラインで動作。データが外部に送信されることは一切ありません。
利用シーン
認証のデバッグに。 リクエストが401 Unauthorizedで失敗した際、トークンをデコードして有効期限が切れていないか、正しいオーディエンス(aud)向けに発行されているか、期待されるロールやスコープを持っているかを確認できます。
APIの構築とテストに。 サーバーが意図したクレームを正しい有効期限でトークンに含めているか、リリース前に確認できます。
OAuthやOpenID Connectの学習に。 IDプロバイダーが発行するIDトークンやアクセストークンは、多くの場合JWTです。テスト用のトークンをデコードすることで、プロバイダーがユーザーについてどのような情報を共有しているかを確認できます。
JWTの構造
header.payload.signature
- ヘッダー — トークンのタイプと署名アルゴリズム。例:
{"alg":"HS256","typ":"JWT"}。 - ペイロード — クレーム(属性情報)。登録済みクレームには
iss(発行者)、sub(主題、通常はユーザーID)、aud(オーディエンス)、exp、nbf、iat、jti(トークンID)などがあります。アプリケーションはnameやroleといったカスタムクレームを追加することもできます。 - 署名 —
header.payloadをシークレット(HMAC)または秘密鍵(RSA、ECDSA、EdDSA)で署名して作成されます。ヘッダーやペイロードが1文字でも変更されると、署名は一致しなくなります。
ペイロードはエンコードされているだけなので、パスワードなどの機密情報をJWTに含めてはいけません。他のBase64データをデコードするにはBase64ツールを、タイムスタンプを調べるにはUnixタイムスタンプ変換ツールをご利用ください。