[解決済み] JWT(JSONウェブトークン)の有効期限を自動的に延長する機能
質問内容
新しいREST APIにJWTベースの認証を実装したいのですが、どうすればよいですか?しかし、トークンに有効期限が設定されているため、自動的に有効期限を延長することは可能でしょうか?私は、ユーザーがその期間にアプリケーションを積極的に使用していた場合、X分ごとにサインインする必要があることを望んでいません。それは大きなUXの失敗となるでしょう。
しかし、有効期限を延長すると、新しいトークンが作成されます(古いトークンは有効期限が切れるまで有効です)。そして、リクエストのたびに新しいトークンを生成するのは、私には馬鹿げているように聞こえます。複数のトークンが同時に有効である場合、セキュリティ上の問題があるように聞こえます。もちろん、ブラックリストを使って古い使用済みのものを無効にすることはできますが、トークンを保存しておく必要があります。JWTの利点の1つは、保存が不要なことです。
Auth0がそれを解決する方法を見つけました。JWTトークンだけでなく、リフレッシュトークンも使っているようです。 https://auth0.com/docs/tokens/refresh-tokens
しかし、これを(Auth0なしで)実装するには、リフレッシュトークンを保存し、その有効期限を管理する必要があります。では、本当のメリットは何でしょうか?トークンは1つだけにして(JWTではない)、有効期限をサーバーで管理するのはどうでしょうか?
他の選択肢はないのでしょうか?JWTの使用はこのシナリオに適していないのでしょうか?
解決方法は?
私はAuth0で働いており、リフレッシュトークン機能の設計に携わっています。
すべてはアプリケーションの種類によりますが、ここでは私たちが推奨するアプローチを紹介します。
ウェブアプリケーション
有効期限が切れる前にトークンをリフレッシュするのが良いパターンです。
トークンの有効期限を1週間に設定し、ユーザーがウェブアプリケーションを開くたびに、また1時間ごとにトークンをリフレッシュしてください。もしユーザーが1週間以上アプリケーションを開かなかった場合、再度ログインする必要がありますが、これはウェブアプリケーションのUXとして許容されるものです。
トークンをリフレッシュするには、有効で期限切れでないJWTを受け取り、新しい有効期限フィールドを持つ同じ署名付きJWTを返す新しいエンドポイントがAPIに必要です。それから、ウェブアプリケーションはトークンをどこかに保存します。
モバイル/ネイティブアプリケーション
ほとんどのネイティブアプリケーションは、ログインを一度だけしか行いません。
リフレッシュ・トークンは有効期限がなく、常に有効なJWTと交換することができるという考え方です。
有効期限のないトークンの問題点は 決して は絶対にない、という意味です。携帯電話を失くしたらどうするのですか?ですから、何らかの方法でユーザーを識別する必要があります。また、アプリケーションはアクセスを取り消す方法を提供する必要があります。そこで、「maryo's iPad"」というように、デバイスの名前を使うことにしました。そして、ユーザーはアプリケーションにアクセスし、"maryo's iPad"へのアクセスを取り消すことができます。
もうひとつの方法は、特定のイベント発生時にリフレッシュ・トークンを失効させるというものです。興味深いイベントは、パスワードの変更です。
このようなユースケースではJWTは役に立たないと考えているので、ランダムに生成した文字列を使い、それを我々の側で保存しています。
関連
-
[解決済み] System.Web.Security がアセンブリに存在しない
-
[解決済み] CloudflareでオリジンIPアドレスの公開を防ぐには?
-
[解決済み] 後で平文を取り出すためのユーザーパスワードの保管について、倫理的にどのように取り組むべきでしょうか?
-
[解決済み] 認証と認可
-
[解決済み] JSONウェブトークンの無効化
-
[解決済み] ハッシュ化アルゴリズムと暗号化アルゴリズムの根本的な違い
-
[解決済み] ブラウザの「パスワードの保存」機能を無効にする
-
[解決済み] HTTPクッキーはポート指定ですか?
-
[解決済み] 認証とセッション管理に関するSPAのベストプラクティス
-
[解決済み] JWTはlocalStorageとcookieのどちらに保存するべきか?重複
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】攻撃者はinspect要素を有害に使用することができるか?
-
[解決済み] セキュリティ透過的な方法Xによるセキュリティクリティカルな方法Yへのアクセスの試みは失敗しました。
-
[解決済み] CloudflareでオリジンIPアドレスの公開を防ぐには?
-
Linuxセキュリティの基礎
-
GTA3 オートフルブラッド C++
-
[解決済み] SSLエラー: ローカルの発行者証明書を取得できない
-
[解決済み] Webサイトに "remember me "を実装するのに最適な方法は何ですか?[クローズド]
-
[解決済み] プログラマーが知っておくべきセキュリティの知識とは?[クローズド]
-
[解決済み] 認証とセッション管理に関するSPAのベストプラクティス
-
[解決済み] HTTP_REFERERはどのような場合に空になるのでしょうか?