は、(特にGluuを使用して)私たちの認証プロトコルのためのOpenID Connectを使用してに落ち着いてきています。どのように我々はOpenIDの接続/ OAuthを持つ複数のホップを超えるIDを渡すことができ
我々は我々が証明することができ、IDを渡しているに実行されている問題は、バックエンドサービスのチェーンに、認証されています。私は人々がid_tokenを渡すのを見たことがありますが、実際にid_tokenの意図ではなく、代わりに最初のクライアントが消費することを本当に意味するものと理解しています。
ある種のデータサービスを呼び出す、関連するRESTサービスを呼び出すAngular Applicationがあるとします。現在、アングルアプリは、ログインのために認証されていないユーザーをGluuにリダイレクトし、id_tokenとaccess_tokenを提供します。
Gluuの実装は、不透明なaccess_tokenを提供することです。したがって、AngularアプリケーションからRESTサービスにそのトークンを渡すときに、Gluuに戻ってトークンを検証し、それに関連付けられたユーザー情報(OpenIdで使用されたスコープに基づいて)とクライアント情報を取得します。これはすべて最初のホップでうまく動作します。
問題は、RESTサービスからデータサービスに接続するときに発生します。 RESTサービスは、client_credentialフローを使用して、データサービスのスコープでGluuを呼び出して、新しいアクセストークンを取得します。しかし、元のトークンを交換する方法が見つからず、元のユーザークレームを保持する新しいトークンが見つかりました。私は、人々は、言うアドバイスを見てきました
「だけでなく、あなたが信頼できるドメイン内ですので、ちょうど彼らが認証されたユーザーIDと信頼を渡しています。」これは私たちのためには機能しません。以前はHMACスキームを使用していましたが、チームは認証されたことのないユーザーIDを渡していました。ユーザーが知らないうちにユーザーを偽装するため、ユーザーが認証されていることを確認する必要があります。
私はここにパズルの一部が欠けているように感じます。これを行う「正しい」方法は何ですか?
アクセストークンまたはid_tokenの選択では、私は 'id_token'を使うと言うでしょう。意図されたオーディエンスのリストと、トークンの必要なグループ/ロール情報(私はgluuがそれを設定できるかどうかはわかりません)、そしてもちろんデタッチされた検証と一緒に正しく使用されますが、id_tokenの使用には何も問題ありません。これは、ID要求を含み、渡すことができるトークンであり、OPで更新することが可能でなければなりません。 – fiddur
@fiddurは応答に感謝します。そのアプローチの問題点は、フロントエンドのクライアントが、他のサービスが川下に関与しているかどうかを知ることができないため、内部アプリケーションの普遍的な視聴者がない限り、視聴者が適切に設定されないことです。 – aasukisuki
RESTサービスがClient_Credsフローを使用してData Serviceに接続すると、なぜDataInfoにuserinfoを渡す必要があるのですか。ユーザーまたは類似のものに関連するデータを取得するために渡す必要がある場合、userID/userNameは技術的にデータサービスで、userID/Nameをリソースサーバー(データサービス)にデータとして渡す必要があります。私が何かを逃した場合は教えてください – dvsakgec