PASETO予約クレーム(iss, sub, aud, exp, iat, nbf, jti)

PASETO予約済み登録クレームのリファレンス。例、ISO 8601タイムスタンプの注意点、仕様推奨の検証順序付き。

Claims

詳細な説明

PASETOはJWTの予約済み登録クレームのセットを継承していますが、1つ重要な違いがあります:タイムスタンプはUnix秒ではなくISO 8601文字列です。

標準クレーム:

{
  "iss": "https://auth.example.com",
  "sub": "user-12345",
  "aud": "https://api.example.com",
  "exp": "2026-01-01T00:00:00Z",
  "iat": "2025-12-31T23:00:00Z",
  "nbf": "2025-12-31T23:00:00Z",
  "jti": "01H6XJ9Y2Z3K..."
}
  • iss(発行者) — トークンを発行した主体。検証者の期待する発行者と一致しなければなりません。
  • sub(主体) — トークンが対象とする相手。通常はユーザーIDまたはサービスアカウント。
  • aud(オーディエンス) — トークンの宛先。検証者は自分宛でないトークンを拒否すべきです。
  • exp(有効期限) — このISO 8601タイムスタンプを過ぎるとトークンは無効。
  • iat(発行時刻) — トークンが発行された時刻。「X時間以上古い」ポリシーに有用。
  • nbf(Not Before) — この時刻以前はトークンを受け付けてはならない。遅延起動に有用。
  • jti(トークンID) — 一意の識別子。リプレイ検出のためによくUUIDv7やULIDが使われます。

検証順序:

PASETO仕様は特定の検証順序を推奨します:まず暗号署名/タグを検証し、次に expnbf、その後 issaud をチェックします。他の順序で行うとバイパスバグを招きます。

ISO 8601の癖:

PASETOは**Z で終わるUTC**形式を要求します:2026-01-01T00:00:00Z であって +00:00 ではありません。一部のライブラリはどちらも受け入れますが、最大の移植性のために常にZを出力してください。検証器が明示的に許容しない限り、サブ秒精度を含めないでください。仕様は秒単位の解像度のみを要求します。

カスタムクレーム:

予約クレームと並んで任意のJSONシリアライズ可能なクレームを追加できます。慣例的に、カスタムクレームキーは小文字で、将来の予約クレームとの衝突を避けるためにsnake_caseまたはドメインプレフィックス付き識別子(example_rolecom_example_scope)を使います。

ユースケース

レビュアーがPASETO発行サービスを監査し、発行されたすべてのトークンにiss、sub、aud、exp、iatが含まれることを確認 — そしてアクセストークンではexpがiatの最大15分後であることも検証します。

試してみる — PASETO Decoder

フルツールを開く