web-dev-qa-db-ja.com

アクセス許可とロールをJWTのペイロードに含める必要がありますか?

クライアントの権限と役割に関する情報をJWTに含める必要がありますか?

JWTトークンにそのような情報があると、有効なトークンが来るたびに非常に役立つため、ユーザーに関する権限に関する情報を抽出するのが簡単になり、データベースを呼び出す必要もありません。 しかし、そのような情報を含め、データベースで同じものをダブルチェックしないと、セキュリティの問題になりますか?

または、

上記のような情報はJWTの一部ではなく、データベースのみを使用してユーザーのアクセスロールとアクセス許可を確認する必要がありますか?

9
Anshul Sahni

トークンにクレームを含める目的は、リソースと認証プロバイダーの間でそのような通信を行う必要がないようにすることです。

リソースは、トークンに有効な署名があることを確認し、コンテンツを信頼することができます。

秘密鍵が認証サーバーに秘密であると仮定すると、あなたは良いです。一部のプロバイダーは、リスクを軽減するためにキーを変更しています。

考えてみれば、リソースが認証サーバーにコールバックしてクレームを取得した場合。次に、基本的に、同様の信頼方法によって適切なサーバーと通信することを保証します。

7
Ewan

私の経験では、すべてのシステムがいくつかの中心的な役割と権限データベースを使用している場合、それらすべてをJWTに追加できます。

ただし、このアプローチは、認証サーバー自体がトークンを受信して​​信頼するターゲットシステムについて何も認識していない場合、SSOシナリオではうまく機能しない可能性があります。

ユーザーの役割と権限は、完全にJWTトークンの受信者にあります。 SSO認証とJWTを、既に許可サブシステムが設定されているレガシーシステムに統合する場合に特に当てはまります。したがって、JWTに存在する必要があるクレームは1つ(ユーザーIDのクレーム)だけです。

1
JustAMartin