web-dev-qa-db-ja.com

SAMLはクロスドメインシングルサインオンの問題をどのように解決しますか?

別々のドメインに存在する2つのWebサイトがあり、それらのサービスプロバイダーは両方とも3番目のドメインで同じIDプロバイダーと通信しているとします。最初のWebサイトにログインして認証し、2番目のWebサイトにアクセスすることにしました。 2番目のWebサイトはIDプロバイダーと通信するため、自分のアカウントにアクセスするために再度ログインする必要はありません。 SAMLを使用してこれをどのように実現しますか?この場合クッキーを使用することは可能ですか?

15
user3127

実際にはCookieにすることができます。サービスプロバイダーに関連付ける必要はなく、IDプロバイダーに関連付ける必要があるためです。 2つのサービスプロバイダーのどちらも、IDプロバイダーに対して認証要求を行うだけなので、認証されていないユーザーのプロセスは、sp.example1.comでもsp.example2.comでも同じです。

ただし、最初の要求がsp.example1.comから行われ、ユーザーがsso.example3.comにリダイレクトされると、ユーザーはsso.example3.comにログインし、sso.example3.comのCookieを設定できます。

次に、ユーザーがsp.example2.comにアクセスすると、認証されていないユーザーがsso.example3.comにリダイレクトされますが、今回は、ユーザーが最後にssoにアクセスしたときのリクエストとともに、ブラウザーに送信するCookieが含まれます。 .example3.com(その訪問が別のサービスプロバイダーによって開始された場合でも).

したがって、sso.example3.comからのCookieは、ユーザーが既に認証済みであることを識別でき、IDプロバイダーは、ユーザーが再度ログインワークフローを完了する必要なく、sp.example2.comに対してユーザーのアサーションを発行するプロセスを続行できます。

19
Xander

クッキーを使用することが可能です。

Cookieは、通信しているWebアプリケーションによってブラウザに保存される小さなデータ(名前と値のペア)にすぎません。すべてのCookieにはドメインが関連付けられており、abc.comからexample.comに属するCookieにアクセスすることはできません。ブラウザが特定のドメインにHTTPリクエストを送信するたびに、そのドメインに関連付けられているすべてのCookieもリクエストとともにサーバーに送信されることに注意してください。

SAML用語

Identity Provider(IdP)-サービスとして認証を提供します

Service Provider(SP)-IdPを使用してユーザーの認証を行います

SAMLを使用したSSO:ユーザーがアクセスしたい2つのサービスSP1とSP2があるとします。

  1. ユーザーがSP1にアクセスしてログインを試みます。SP1がIdPに認証要求を送信し、ユーザーのブラウザーがIdPにリダイレクトされ、そこで資格情報を入力します。認証が成功した後、ユーザーは再びSP1にリダイレクトされ、IdPは認証情報を含む assertion をSP1に送信します。これでユーザーが認証され、SP1のサービスを使用できるようになります。この場合、IdPからの応答には、ユーザーを識別するためのCookieも含まれます。このCookieはブラウザに保存されます。

  2. これで、ユーザーはブラウザーで別のタブを開き、SP2のWebサイトにアクセスしようとします。再び彼がログインしようとすると、ブラウザーはIdPにリダイレクトされ、このリダイレクトにより、IdPによって設定されたCookieも送信されます。 IdPはCookieを受信し、ブラウザをSP2にリダイレクトするアサーションを送信します。ユーザーは、資格情報を再度入力する必要なくSP2にログインします。

10
Shurmajee

私は信じている mod_auth_openidcは、iframeを使用してこの機能を「セッション管理」として実装します。 ここ

しかし、他のSAML/OpenIdC製品を使用した他のより良い/代替ソリューションがあるかどうかはわかりません

チャレンジはセッションCookieです。これは、SSOのWebサイトでセッションCookieまたは時間ベースのCookieを設定することがわかっているためです。ログイン状態を維持するにはどうすればよいですか?バックエンドでSSO Webサイトへのajax呼び出しを試しますか?それは私が考えることができる1つの方法です。

0
Cyokin zhang