人々は通常、JWTに権限を保存しますか?私はadmin: true
またはscopes: ['add_foo', 'delete_foo', 'read_foo']
の例を見てきました。これはうまくいくようですが、JWTは多くの権限/スコープがあれば大きなサイズになる可能性があります。 JWTが検証できるのであれば、ユーザー権限を得るためにDBやキャッシュを使用する必要がないので、本当に便利なようです。権限でのJWTの無効化
私の主な質問は、権限の変更があった場合にこれらがどのように無効にされるかです。
たとえば、sysadmin Joeは、ユーザーBobから 'add_foo'および 'delete_foo'権限を取り消しますが、 'read_foo'権限は保持します。このシナリオでは、ユーザーボブはトークンを完全に無効にする必要はなく、元に戻す必要があります。新しい権限を持つ新しいJWTを基本的に取得し、通常どおり実行する必要があります。
パスワード変更の際に新しいJWTを発行する例を見てきましたが、違いはsysadmin JoeがユーザーBobに更新を行う点です。したがって、このワークフローでは、ユーザBobが新しいトークンをすぐに取得する機会はありません。
ほとんどの例では、取り消されたトークンのブラックリストを維持したり、トークンが有効でなくなるようにDBレコードIDを変更したり、ユーザーごとの秘密を持って変更したりするための無効化を提案しています。
これらのすべてがトークンを取り消して無効であることをテストしますが、ユーザーはどのようにして新しいトークンを取得しますか?現在のJWTは現在無効ですか?それで何かしようとすると失敗するはずです。
私は "リフレッシュトークン"について言及しました。これらは広く使われていますか?ウェブ上で安全であるか、リフレッシュトークンを入手するのが難しいモバイルアプリに主に使用されますか?ブラウザのdevツールなどでリフレッシュトークンを盗むのはかなり簡単だと思われ、不正アクセスが検出されてリフレッシュトークンが取り消されるまで誰かがそのアカウントに永久にアクセスできます。
このシナリオでは、ユーザーBobに再認証を強いることは大したことではないでしょうか?許可はおそらくあまり頻繁に変更されません。
ありがとう、マイク。