web-dev-qa-db-ja.com

JSON Web Tokenの有効期限

ほとんどのJWT(JSON Web Token)チュートリアル(例: this および this )では、検証されたら、受信トークンを使用して検証せずにクライアント情報を取得できますDBから。

私の質問は、無効なユーザーの状況はどのように維持されますか?つまり、クライアントが1週間で期限切れになるJWTトークンを取得したとしましょう。しかし、非常に具体的な理由から、ユーザーを無効にすることを決定し、ユーザーがAPIにアクセスすることを望まないということができます。ただし、そのユーザーには有効なトークンがあり、ユーザーはAPIにアクセスできます。

もちろん、リクエストごとにデータベースへの往復を行った場合、アカウントが有効か無効かを検証できます。私の質問は、長寿命トークンのこの種の状況に注意する最善の方法は何ですか。

前もって感謝します。

16
Jahid Shohel

不可能でなければ、JWTベースのアクセストークンを取り消すことは困難です。

アクセストークンはどのように表すべきですか? 2つの主な方法があります。

  1. 無意味なランダム文字列として。アクセストークンに関連付けられた情報は、承認サーバーの背後にあるデータベーステーブルに格納されます。
  2. Base64urlまたは類似のものによってアクセストークン情報をエンコードした結果である自己完結型の文字列として。

これらの方法を選択すると、次の表で説明するように、結果的に違いが生じます。

enter image description here

"7。アクセストークン"in " OAuthおよびOpenID Connectの完全な実装者所見についてのトーク "トークン表現へのアクセス方法の長所と短所。

アクセストークンがJWTベースの場合、システムは(1)失効したアクセストークンが期限切れになるまで記憶する必要があります。別の妥協案は、(2)アクセストークンのライフタイムを十分に短くして、それらの取り消しをあきらめることです

個人的に、検討後、JWTベースのアクセストークンが発行された後に取り消しおよび更新することが困難/不可能であるため、承認サーバーを実装するときにアクセストークン表現としてJWTを選択しませんでした( Authlete ) 。

6

質問からどのOAuthフローを使用しているか、またはOauthではなくOpenID Connectを参照しているかどうかは明らかではありません。

リフレッシュトークンの使用を検討し、アクセストークンの有効期限をはるかに短くします。 30分.

このシナリオでは、ユーザー(resource owner)認証を続ける必要はなく、API(Resource Server)リクエストごとにユーザーがまだ有効であるかどうかを確認する必要はありません。

アクセストークンの有効期限が切れると、client(APIを呼び出すアプリケーション)がDB(Authorisation Server)その更新トークンを新しいアクセストークンと交換します-通常は新しい更新トークン-ユーザーがまだDB上の有効なユーザーであり、ユーザーがクライアントアプリケーションのデータへのアクセスを取り消していない場合API。

承認サーバーで許可されている場合は、別の回答で提案されているようにトークン失効を使用することもできますが、実装がはるかに簡単で、ユーザー認証/承認の懸念でAPIを汚染しないため、リフレッシュトークンと短命のアクセストークンを試しますジョブは認証サーバーによって最適に実行されます。

0
iandayman

RFC 7009 は、OAuth 2.0 Token Revocationを指定します。基本的に、access_tokensを取り消すことができるエンドポイントがあります。

0
moritzg

これが、JWTを使用しているときの主な問題です。したがって、この場合の基本的な最善のアプローチは、ゲートウェイでブラックリストを作成することです。セキュリティの観点からは最善のソリューションではありませんが、これはJWTを使用している場合にのみ良いソリューションです。

0