JWT(JSON Web Token)有効期限の自動延長 質問する

JWT(JSON Web Token)有効期限の自動延長 質問する

新しい REST API に JWT ベースの認証を実装したいと考えています。ただし、トークンに有効期限が設定されているため、自動的に延長することは可能ですか? ユーザーがその期間中にアプリケーションをアクティブに使用していた場合、X 分ごとにサインインが必要になるのは望ましくありません。これは UX の大きな失敗です。

しかし、有効期限を延長すると、新しいトークンが作成されます (古いトークンは有効期限が切れるまで有効です)。また、リクエストごとに新しいトークンを生成するのは馬鹿げているように思えます。複数のトークンが同時に有効である場合、セキュリティ上の問題になるようです。もちろん、ブラックリストを使用して古い使用済みトークンを無効にすることもできますが、トークンを保存する必要があります。また、JWT の利点の 1 つは、ストレージが不要なことです。

Auth0 がどのように解決したかがわかりました。JWT トークンだけでなく、リフレッシュ トークンも使用します。https://auth0.com/docs/tokens/refresh-tokens

しかし、もう一度言いますが、これを実装するには (Auth0 なしで) リフレッシュ トークンを保存し、その有効期限を維持する必要があります。それでは実際のメリットは何でしょうか? トークンを 1 つだけ (JWT ではない) にして、有効期限をサーバー上に維持するのはなぜでしょうか?

他に選択肢はありますか? このシナリオでは JWT の使用は適していませんか?

ベストアンサー1

私は Auth0 で働いており、リフレッシュ トークン機能の設計に携わっていました。

それはすべてアプリケーションの種類によって異なりますが、ここでは私たちが推奨するアプローチを紹介します。

ウェブアプリケーション

良いパターンとしては、期限が切れる前にトークンを更新することです。

トークンの有効期限を 1 週間に設定し、ユーザーが Web アプリケーションを開くたびに、および 1 時間ごとにトークンを更新します。ユーザーが 1 週間以上アプリケーションを開かない場合は、再度ログインする必要がありますが、これは許容できる Web アプリケーション UX です。

トークンを更新するには、API に、有効で期限切れでない JWT を受信し、新しい有効期限フィールドを持つ同じ署名済み JWT を返す新しいエンドポイントが必要です。その後、Web アプリケーションはトークンをどこかに保存します。

モバイル/ネイティブアプリケーション

ほとんどのネイティブ アプリケーションは、ログインを 1 回だけ行います。

リフレッシュ トークンは期限切れになることはなく、常に有効な JWT と交換できるという考え方です。

期限切れのないトークンの問題は、期限切れがないということは、期限切れがないということだ。携帯電話を紛失したらどうするだろうか。そのため、ユーザーが何らかの方法で携帯電話を識別できるようにし、アプリケーションでアクセスを取り消す方法を提供する必要がある。私たちは、デバイスの名前、たとえば「maryo's iPad」を使用することにしました。そうすれば、ユーザーはアプリケーションにアクセスして、「maryo's iPad」へのアクセスを取り消すことができます。

もう 1 つのアプローチは、特定のイベントでリフレッシュ トークンを取り消すことです。興味深いイベントとしては、パスワードの変更があります。

JWT はこれらのユースケースには役立たないと考えられるため、ランダムに生成された文字列を使用して当社側で保存します。

おすすめ記事