web-dev-qa-db-ja.com

JWT:一定の非アクティブ時間の後にトークンを期限切れにするソリューション?

JWTトークンを使用するステートレスWebアプリケーションがあります。最終的には期限切れになります-これは問題ありませんただし、ユーザーが作業している間は期限切れにしたくありません。代わりに、私はトークンが一定の非アクティブな時間の後に期限切れになることを望みます。

私のトークンが60分間有効であるとしましょうすべてのリクエストで新しいJWTを送信しますか?このように、ユーザーが作業している限り、トークンが更新されます( 1時間あたりのリクエスト数)、ただし、1時間以上操作がないと、トークンは期限切れになります。

ステートフルな更新トークンを使用したくありません。クライアント側のタイマーは、トークンが期限切れになるとすぐにトークンを削除します。

このアプローチには大きな欠陥がありますか? (より頻繁なDBアクセスによる明らかなパフォーマンスへの影響を除く)

12
Tim

JWTは、自己記述型の整合性チェックトークンです。それらはあなたが説明したユースケースのために設計されていません。 JWTをオンデマンドで期限切れにすることはできません。また、その有効性を延長することもできません。

これらのトークンでできることは、あなたが説明したように、新しいトークンを発行することです。これは古いものを無効にしません。自分で期限切れになる多くのトークンを生成することになります。

このアプローチには大きな欠陥がありますか?

JWTは本格的なセッション管理用に設計されていません。それらにはさまざまなトレードオフが伴います。これらの1つは、それらを更新したり、オンデマンドで期限切れにできないことです。説明した回避策は完全に機能します。私は セッション管理 についての短い投稿を書きました。

私の意見では、おそらく「クラシック」セッション管理モデルに移行する必要があります。アイドルタイムアウトをサポートしているため、多くの「セッション」(トークン)が発生することもありません。

6
Daniel Szpisjak