ほとんどのJWT(JSON Web Token)チュートリアル(例: this および this )では、検証されたら、受信トークンを使用して検証せずにクライアント情報を取得できますDBから。
私の質問は、無効なユーザーの状況はどのように維持されますか?つまり、クライアントが1週間で期限切れになるJWTトークンを取得したとしましょう。しかし、非常に具体的な理由から、ユーザーを無効にすることを決定し、ユーザーがAPIにアクセスすることを望まないということができます。ただし、そのユーザーには有効なトークンがあり、ユーザーはAPIにアクセスできます。
もちろん、リクエストごとにデータベースへの往復を行った場合、アカウントが有効か無効かを検証できます。私の質問は、長寿命トークンのこの種の状況に注意する最善の方法は何ですか。
前もって感謝します。
不可能でなければ、JWTベースのアクセストークンを取り消すことは困難です。
アクセストークンはどのように表すべきですか? 2つの主な方法があります。
これらの方法を選択すると、次の表で説明するように、結果的に違いが生じます。
"7。アクセストークン"in " OAuthおよびOpenID Connectの完全な実装者所見についてのトーク "トークン表現へのアクセス方法の長所と短所。
アクセストークンがJWTベースの場合、システムは(1)失効したアクセストークンが期限切れになるまで記憶する必要があります。別の妥協案は、(2)アクセストークンのライフタイムを十分に短くして、それらの取り消しをあきらめることです。
個人的に、検討後、JWTベースのアクセストークンが発行された後に取り消しおよび更新することが困難/不可能であるため、承認サーバーを実装するときにアクセストークン表現としてJWTを選択しませんでした( Authlete ) 。
質問からどのOAuthフローを使用しているか、またはOauthではなくOpenID Connectを参照しているかどうかは明らかではありません。
リフレッシュトークンの使用を検討し、アクセストークンの有効期限をはるかに短くします。 30分.
このシナリオでは、ユーザー(resource owner
)認証を続ける必要はなく、API(Resource Server
)リクエストごとにユーザーがまだ有効であるかどうかを確認する必要はありません。
アクセストークンの有効期限が切れると、client
(APIを呼び出すアプリケーション)がDB(Authorisation Server
)その更新トークンを新しいアクセストークンと交換します-通常は新しい更新トークン-ユーザーがまだDB上の有効なユーザーであり、ユーザーがクライアントアプリケーションのデータへのアクセスを取り消していない場合API。
承認サーバーで許可されている場合は、別の回答で提案されているようにトークン失効を使用することもできますが、実装がはるかに簡単で、ユーザー認証/承認の懸念でAPIを汚染しないため、リフレッシュトークンと短命のアクセストークンを試しますジョブは認証サーバーによって最適に実行されます。
RFC 7009 は、OAuth 2.0 Token Revocationを指定します。基本的に、access_tokensを取り消すことができるエンドポイントがあります。
これが、JWTを使用しているときの主な問題です。したがって、この場合の基本的な最善のアプローチは、ゲートウェイでブラックリストを作成することです。セキュリティの観点からは最善のソリューションではありませんが、これはJWTを使用している場合にのみ良いソリューションです。