JWTのnbf(有効開始時刻)クレーム
JWT nbf(有効開始時刻)クレームの仕組み、トークンの有効化を遅延させる方法、NumericDate形式、遅延有効化が必要なシナリオについて解説します。
詳細な説明
nbf(有効開始時刻)クレームは、JWTが処理を受け入れられる最も早い時刻を指定します。サーバーがトークンを受信し、現在時刻がnbfの値より前の場合、そのトークンは拒否されなければなりません。expやiatと同様に、値はUnixエポックからの秒数で表されます。
nbfの動作:
{
"sub": "user789",
"iat": 1700000000,
"nbf": 1700003600,
"exp": 1700007200
}
この例では、トークンはタイムスタンプ1700000000で発行されますが、1700003600(1時間後)までは使用できません。その後1700007200まで有効です。これにより、トークンは存在するがまだ使用できない「遅延有効化ウィンドウ」が作成されます。
nbfの実際のユースケース:
最も一般的なシナリオは、予定された操作のためにトークンを事前発行することです。例えば、CI/CDシステムが予定されたリリースの数時間前にデプロイメントトークンを生成し、nbfをデプロイメントウィンドウの開始時刻に設定できます。もう一つのユースケースはバッチトークン生成です。管理ポータルが複数のユーザーのトークンを事前に作成し、それぞれ異なるnbf値をアクセス開始日に対応させることができます。
クロックスキューの処理:
実際の分散システムでは、完全に同期された時計を持つことはまれです。JWTライブラリは通常、設定可能なクロックスキュー許容値(clockToleranceやleewayと呼ばれる)を受け入れます。一般的な設定は30〜60秒です。つまり、nbfが12:00:00に設定されたトークンは、許容値が30秒の場合、11:59:30でも受け入れられる可能性があります。この許容値がないと、一方のサーバーの時計がわずかに遅れているだけで、正当なトークンが拒否される可能性があります。
セキュリティ上の関連性:
nbfクレームはexpほど一般的には使用されませんが、トークンの有効期間ウィンドウを正確に制御する必要があるシナリオで価値があります。expと組み合わせることで、正確な有効範囲が作成されます。nbfを検証するライブラリは、事前発行されたトークンが意図した有効化時刻より前に使用されることを防ぎます。nbfが存在する場合は必ずJWTバリデーションロジックで検証してください。無視するとその目的が無意味になります。
ユースケース
チケットシステムがイベントの数日前にアクセストークンを発行し、nbfをイベント開始時刻に設定することで、早期入場にトークンが使用されるのを防ぎます。