JWTのiat(発行時刻)クレーム

JWT iat(発行時刻)クレームの仕組み、トークン作成時刻の記録方法、トークン有効期間の検証における役割、サーバーでの活用方法を解説します。

Claim

詳細な説明

iat(発行時刻)クレームは、JWTが作成された時刻を記録します。expnbfと同様に、NumericDate形式(Unixエポックからの秒数)を使用します。JWT仕様(RFC 7519)ではiatクレームはオプションですが、トークンの経過時間に関する重要な情報を提供するため、使用が強く推奨されています。

目的と形式:

{
  "sub": "user456",
  "iat": 1700000000,
  "exp": 1700003600
}

ここで、iat: 1700000000は、トークンがそのUnixタイムスタンプの時点で発行されたことをサーバーに伝えます。expと組み合わせることで、意図されたトークンの有効期間(この場合は3600秒、つまり1時間)がわかります。

サーバーでのiatの活用:

サーバーはiatを使用して、expクレームとは独立にトークンの最大有効期間ポリシーを強制できます。例えば、expにまだ達していなくても、24時間以上前に発行されたトークンを拒否できます。これはセキュリティポリシーが変更された場合に、特定の日時より前に発行されたトークンを無効にしたい場合(パスワードリセットやセキュリティインシデント後など)に有用です。サーバーは最後の認証情報変更のタイムスタンプを記録し、それより前のiatを持つトークンを拒否できます。

他のクレームとの関係:

iatクレームはexpnbfを補完するものです。expはトークンの有効期限を、nbfはトークンが有効になる時刻を定義しますが、iatは純粋に情報的なもので、作成時刻を記録します。ただし、一部のライブラリは絶対的な有効期限の代わりに有効期間を指定した場合に、iatを使ってexpを計算します。例えば、Node.jsのjsonwebtokenではexpiresIn: "1h"と指定すると、iatからexpを自動的に計算します。

セキュリティ上の考慮事項:

トークンのiatが未来の時刻に設定されている場合、時刻操作や偽造トークンの可能性があります。一部のバリデーションライブラリは、iatが未来の時刻であるトークンを拒否します。トークン処理時には、iatが妥当な値であることを必ず検証してください。また、iatexpの代用として使用しないでください。両者は異なる目的を持っています。

ユースケース

ユーザーがパスワードを変更した後、サーバーはパスワード変更イベントより前のiatタイムスタンプを持つすべてのJWTを拒否し、再認証を強制できます。

試してみる — JWT Decoder

フルツールを開く