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仕様は特定の検証順序を推奨します:まず暗号署名/タグを検証し、次に exp と nbf、その後 iss と aud をチェックします。他の順序で行うとバイパスバグを招きます。
ISO 8601の癖:
PASETOは**Z で終わるUTC**形式を要求します:2026-01-01T00:00:00Z であって +00:00 ではありません。一部のライブラリはどちらも受け入れますが、最大の移植性のために常にZを出力してください。検証器が明示的に許容しない限り、サブ秒精度を含めないでください。仕様は秒単位の解像度のみを要求します。
カスタムクレーム:
予約クレームと並んで任意のJSONシリアライズ可能なクレームを追加できます。慣例的に、カスタムクレームキーは小文字で、将来の予約クレームとの衝突を避けるためにsnake_caseまたはドメインプレフィックス付き識別子(example_role、com_example_scope)を使います。
ユースケース
レビュアーがPASETO発行サービスを監査し、発行されたすべてのトークンにiss、sub、aud、exp、iatが含まれることを確認 — そしてアクセストークンではexpがiatの最大15分後であることも検証します。