JWTの有効期限はペイロードに含まれるクレームで管理されます。主に「exp(Expiration Time)」、「nbf(Not Before)」、「iat(Issued At)」の3つのクレームが関連します。これらはUnixタイムスタンプ(UTC)で表現され、1970年1月1日からの経過秒数で表されます。
expクレームはトークンが無効になる時刻を示します。この時刻を過ぎると、トークンは受け入れてはなりません。例えば「exp: 1672531199」という値は2023年1月1日のUTC23:59:59に期限切れとなります。このクレームは必須ではありませんが、セキュリティ上推奨されます。
nbfクレームはトークンが有効になる時刻を示します。この時刻以前のトークンは受け入れてはなりません。iatクレームはトークンが発行された時刻を示します。これらを組み合わせることで、トークンの有効期間を正確に制御できます。サーバー側での検証ロジックにおいて、これらは必須の検証項目です。
JWTデコーダーでは、デコードされたペイロード内のexp、nbf、iatフィールドを確認できます。Unixタイムスタンプは読みにくいですが、実際の開発ではDate型に変換して表示します。クライアント側でもトークンの有効期限を確認し、期限切れ前にリフレッシュすることが一般的です。
セキュリティの観点から、JWTの有効期間は短めに設定することが推奨されます。一般的には15分から1時間程度のアクセストークンが推奨されます。リフレッシュトークンを使用して、アクセストークンの期限切れ時に新しいトークンを発行するフローが標準的です。無期限のJWTは避けるべきです。また、トークンが盗まれた場合のリスクを考慮し、ブラックリストによる即時無効化も検討すべきです。