JWTトークンのデコードと理解方法

開発者

JSON Web Token(JWT)の内容、ペイロードを読むためのデコード方法、ライブラリなしでの構造検証を学びましょう。

JWTとは?

JSON Web Token(JWT)は、コンパクトかつURL安全な形式でクレーム(情報の主張)を伝える仕組みで、RFC 7519で標準化され、現代のAPI認証やSSO(シングルサインオン)の定番となっています。JWTは1本の文字列の中に小さなJSONと暗号署名を収めた形で、受け取った側は誰でも中身を読めますが、有効なトークンを発行できるのは署名鍵を持つサーバーだけです。この性質によりサーバーはセッションを保持する必要がなくなり、ユーザーID・権限・有効期限といった情報をトークン自体が運ぶ「ステートレス認証」が実現します。

よく使われる場面

  • API認証

    ユーザーが一度ログインするとJWTが発行され、以降のリクエストではAuthorization: Bearer ヘッダでトークンを送ります。APIは署名を検証するだけで身元と権限を信頼でき、DBアクセスが不要になります。

  • シングルサインオン(SSO)

    OpenID Connectの基盤はJWTです。IDプロバイダが発行するIDトークンを、下流アプリは公開されているJWKSエンドポイントで検証することで、ログイン状態を共有できます。

  • 短期の一回限りのアクセス権

    パスワードリセット、メール確認、署名付きダウンロードURLなど、一度使って終わる用途に最適です。expクレームに有効期限を入れておけば自動的に失効します。

ステップガイド

1

JWT構造を理解する

JWTはドットで区切られた3つのBase64URLエンコード部分で構成されます:ヘッダー.ペイロード.署名。ヘッダーはアルゴリズムを指定し、ペイロードはクレーム(データ)を含み、署名は整合性を検証します。

2

ヘッダーをデコードする

最初のドットの前の部分を取り、Base64URLデコードします。{"alg":"HS256","typ":"JWT"}のようなJSONオブジェクトが得られます。これが使用されている署名アルゴリズムを示します。

3

ペイロードをデコードする

2番目の部分をBase64URLデコードします。sub(サブジェクト/ユーザーID)、exp(有効期限UnixタイムスタンプP)、iat(発行時刻)、iss(発行者)などのクレームが見えます。

4

有効期限を確認する

expクレームはUnixタイムスタンプです。現在時刻と比較してトークンがまだ有効かどうか確認します。例:exp: 1700000000 = 2023年11月14日 22:13 UTC。

5

JWTデコーダーツールを使う

JWTをJWTデコーダーツールに貼り付けると、デコードされたヘッダー・ペイロード・署名をフォーマットされたJSONで即座に表示します。サーバー不要、ブラウザ内で完結します。

無料ツールを使う

JWT デコーダー

よくある質問

Q: ブラウザでJWTをデコードするのは安全ですか?

A: はい——デコード(ペイロードを読む)は安全です。JWTはBase64URLエンコードであり、暗号化ではありません。トークンはアクセス権を付与するため、信頼できない第三者のサイトには共有しないでください。

Q: 秘密鍵なしでJWT署名を検証できますか?

A: できません。署名検証にはHMACの場合は秘密鍵、RSA/ECDSAの場合は公開鍵が必要です。デコーダーは構造を表示しますが、鍵なしでは署名を検証できません。

Q: 「JWTの有効期限が切れた」とはどういう意味ですか?

A: expタイムスタンプが過去になっていることを意味します。サーバーは期限切れトークンを拒否します。新しいトークンを取得するには再認証が必要です。