2016-12-07 4 views
1

は、(特に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を渡していました。ユーザーが知らないうちにユーザーを偽装するため、ユーザーが認証されていることを確認する必要があります。

私はここにパズルの一部が欠けているように感じます。これを行う「正しい」方法は何ですか?

+0

アクセストークンまたはid_tokenの選択では、私は 'id_token'を使うと言うでしょう。意図されたオーディエンスのリストと、トークンの必要なグループ/ロール情報(私はgluuがそれを設定できるかどうかはわかりません)、そしてもちろんデタッチされた検証と一緒に正しく使用されますが、id_tokenの使用には何も問題ありません。これは、ID要求を含み、渡すことができるトークンであり、OPで更新することが可能でなければなりません。 – fiddur

+0

@fiddurは応答に感謝します。そのアプローチの問題点は、フロントエンドのクライアントが、他のサービスが川下に関与しているかどうかを知ることができないため、内部アプリケーションの普遍的な視聴者がない限り、視聴者が適切に設定されないことです。 – aasukisuki

+0

RESTサービスがClient_Credsフローを使用してData Serviceに接続すると、なぜDataInfoにuserinfoを渡す必要があるのですか。ユーザーまたは類似のものに関連するデータを取得するために渡す必要がある場合、userID/userNameは技術的にデータサービスで、userID/Nameをリソースサーバー(データサービス)にデータとして渡す必要があります。私が何かを逃した場合は教えてください – dvsakgec

答えて

0

id_tokenを渡さないでください。 OpenID Connect仕様では、id_tokenがクライアントアプリケーションで使用されることを示しています。私は、次の2つの方法 )そのアクセストークンは、すべてのサービスのために働くと観客が正しいのサービスが含まれているように、すべての必要な下流のスコープを要求するために、クライアントアプリケーションを要求して解決し、この問題を見てきました。これはあなたの状況では不可能かもしれませんが、私はこれが最も簡単な(おそらく最高ではない)アプローチだろうと言います。

2)GLUUについてはわかりませんが、OAuth 2.0仕様ではextension grantsについてお話ししておりますが、これはあなたの状況に役立つ可能性があります。これは、仕様ごとに 'code'、 'password'、 'implicit'以外の独自の許可を定義できることを意味します。カスタムグラントを実装することをお勧めします。ユーザーを認証するためのカスタム情報を定義できます。私が扱っている別のOAuth 2.0/OpenID ConnectフレームワークがIdentityServerと呼ばれています。 GLUUではないにしても、GLUUとIdentityServerはよく定義されたプロトコルに従っているため、この記事では拡張機能の付与について説明しています。この記事では、認証を適切に委任するという特定の問題を拡張機能がどのように解決できるかを示します。見てくださいhere。 GLUUに似た何かを実装することが私の希望です。

関連する問題