OAuth2デプロイメントのコンテキスト内で、複数のリソースサーバーにスコープを持ち、すべてのリソースサーバー間でシークレットを共有する承認サーバーとは関係なく、各リソースサーバーによって復号化できる暗号化されたJWTをクライアントに付与します。
このシナリオで解決する仕様はありますか?
次のセクションの要件では、残りの制約をいくつか指定しています。
認証コード付与( https://tools.ietf.org/html/rfc6749#section -1.3.1 )私のユースケースをさらに説明するために。
また、次のサービスへの委任アクセスを要求する承認ダイアログが表示されます。
「承認」をクリックすると
次に、OAuth2クライアントアプリケーションシステムは、次のスコープを持つトークンを受け取ります。
(...)
このシステムの私の実装では、「写真リソース」と「友達リソース」は2つの異なるリソースサーバー上にあります。上記のように、これらのリソースサーバーが同一の秘密鍵を共有しないことが目標です。
これを読んでくれてありがとう。私は本当に提案やポインタをいただければ幸いです。
私はあなたのような「問題」に直面したので、数回あなたの質問を読みました。トークンとしてOpenID ConnectとJWTを使用したOAuth2を使用して提示されたソリューションは正しいです。私はMediumに書いた article で、OpenID ConnectでOAuth2を使用する方法を詳しく説明しました。ご不明な点がございましたら、お気軽にお問い合わせください。
後で編集
OAuth2の弱点の1つは、リソースサーバーがアクセストークンを検証したり、アクセストークンを使用してユーザーのIDを確立したりするための規定された方法がないことです。
Googleおよびその他のOAuth2プロバイダーは、TokenInfoエンドポイントを提供することでこの問題を解決しました。リソースサーバーは、アクセストークンをこのエンドポイントに渡し、トークンの有効性、ユーザーID、トークンのスコープ、および有効期限に関する情報を取得できます。私の場合、このエンドポイントは許可サーバーに対応しています。
この概念は、IDトークンの導入によりOpenID Connectで拡張されました。 IDトークンは、ユーザーのIDとスコープ内のクレームを含む、署名され暗号化されている可能性のあるトークンです。
IDトークンは、IDデータを含むJSON Web Token(JWT)です。クライアントによって消費され、ユーザーの名前、電子メールなどのユーザー情報を取得するために使用されます。これは、リソースサーバーのチェーンがあり、リソースサーバーが別のリソースサーバーのクライアントになる場合にも役立ちます。
JWT機能により、クライアントアプリケーションとリソースサーバーは、承認サーバーに毎回アクセスする必要なく、ユーザーに関する情報を安全に直接取得できます。
過度に広いアクセストークンの発行を防ぎたい場合は、チェーンの各ポイントで承認チェックを提供できます。リソースサーバーは、承認サーバーのクライアントになり、そのJWTを提示し、チェーン内の次のリソースサーバーの新しいJWTを要求できます。