2016-04-11 16 views
1

私は2つのサーバAとBを持っているとしましょう。ユーザエージェントはAを認証して認証するためにA(そしてOpenIDプロバイダ)にしか接続しません。 Bを信頼し、HTTPS経由でのみBと話すAが、OpenIDプロバイダのトークンエンドポイントから受信した(暗号化されていない)IDトークンをBに渡すことはOKですか?暗号化されていないIDトークンを共有することはできますか?

これは、AがIDトークンで表されるように、認証されたユーザーに代わってBの操作を呼び出すことができるようにするためです。 Bは、ユーザーが実際にAで動作するように認証されたことを検証できなければなりません(IDトークンのaudオーディエンス値とIDトークンの署名をチェックして、改ざんされていないことを確認します。 。

これは良い方法と考えられますか?それとも別のやり方でやっているのですか?

また、この場合、IDトークンを要求するときに、BのクライアントIDをaudリストに追加する必要がありますか?私はその点を見ていませんが、実際にはOpenID認証エンドポイントはエンドユーザにエンドユーザへのオーディエンス(実際にはエンドユーザに何も意味しないクライアントIDではありません)を実際に表示します彼らの同意を得ますか?

答えて

1

これは、ユーザーがOpenID Connectを使用してRP Aにサインオンした後、OpenID Connectフローの一部として提供されたアクセストークンを使用して、ユーザーの代わりにBを呼び出す場合のようです。

IDトークンを渡したり、audという識別子を共有したり、クライアントの秘密情報を共有したりするのは面倒です。 Bはアクセストークンを検査して、ユーザーがAに適切な「スコープ」(アクセス権)を持っているかどうかを調べることができます。

IDトークンを特定の受信者に向けて共有することは好ましくありません。

OpenID Connectフローで受信されたアクセストークンは、認証要求に余分に要求されたスコープを含めることで、userinfoエンドポイント以上のものに関連付けることができます。

+0

アクセストークンは、UserInfoエンドポイントからユーザーデータを取得するためだけにBによって使用できます。私は、Bを信頼することなく、さらにOpenIDプロバイダとのやりとりなしに、AからBに送信されたデータを調べることによって、Bのユーザの身元を確認し、ユーザの同意を確認できるようにしたいと思います。ですから、認証と認証の詳細をAからBに送信し、その詳細をOpenID ProviderがBの署名で検証する必要があります。元の質問を書き直すことができるかどうかがわかります。 –

+0

アクセストークンは、クライアントが追加のスコープを要求することによって、ユーザー情報エンドポイント以外のAPIを呼び出すために使用することができます –

+0

私は、認証トークンがOpenIDで実際のデータと交換されるだけの不透明な識別子プロバイダーのUserInfoエンドポイントが、私の宿題を済ませて、認証トークンa)は同意したクレームを含み、b)OpenIDプロバイダーによって署名されています。それが私が必要なものすべてです!私はついにあなたの答えを理解します。 –

関連する問題