4

Spring Security SAML 拡張機能を使用してアプリケーションをサービス プロバイダーとして機能させるために、SAML SSO のサポートを実装しました。SP をさまざまな IDP と統合できました。たとえば、 HostA 、 HostB 、および HostCがあり、これらはすべてアプリケーションの異なるインスタンスを持っています。ホストごとに SP メタデータ ファイルを指定し、AssertionConsumerServiceURL にそのホストの URL を設定しました (例:https:HostA.com/myapp/saml/sso )。各メタデータ ファイルを IDP に追加し、それらすべてをテストしたところ、正常に動作しています。

ただし、私のプロジェクトでは、負荷分散用に構成された IBM HTTP Server を使用することで、高可用性もサポートしています。したがって、この場合、HTTP サーバーはホスト (A、B、C) を負荷分散に使用するホストとして構成し、ユーザーはHTTP サーバーの URL (https:httpserver.com/myapp/) を使用してアプリケーションにアクセスします。

1 つの SP メタデータ ファイルを定義し、HTTP サーバーの URL を AssertionConsumerServiceURL ( https://httpserver.com/saml/sso )で指定し、実装を変更して HTTP サーバーを対象とするアサーションを受け入れるようにした場合、結果はどうなりますか?このシナリオの:

  1. ユーザーは、ユーザーを HostA にディスパッチした HTTPServer にアクセスします (舞台裏)。
  2. HostA の SP アプリケーションは、認証のために IDP に要求を送信します。
  3. IDP は、 https ://httpserver.com/saml/sso として応答を httpserver に送り返し ます 。

HTTP サーバーは HostA にリダイレクトし、次のようにします: https://HostA.com/saml/sso

ありがとう。

4

1 に答える 1

7

アプリケーションの同じインスタンスをロード バランサーの背後にあるクラスター モードでデプロイする場合、バックエンド アプリケーションに、デプロイされている HTTP サーバー ( https://httpserver.com/myapp/ )のパブリック URL について指示する必要があります。を使用してこれを行うことができますSAMLContextProviderLB(詳細はマニュアルを参照してください)。しかし、あなたはすでにこのステップを成功させているようです。

HTTP サーバーがリクエストを受信すると、それをホストの 1 つに URL (例: https://HostA.com/saml/sso ) に転送し、通常は元の URL を HTTP ヘッダーとして提供します。これSAMLContextProviderLBにより、SP アプリケーションは、実際の URL がhttps://httpserver.com/saml/ssoであると認識し、宛先 URL に関連するすべての SAML セキュリティ チェックに合格します。

バックエンド アプリケーションは HttpSessions に状態を保存するため、次のいずれかを実行してください。

  • HTTP サーバーでスティッキー セッションを有効にする (関連する要求が常に同じサーバーに送信されるようにするため)
  • クラスタ全体で HTTP セッションを複製するようにしてください
  • Spring 構成にBean を含めることで、応答 ID のチェックを無効EmptyStorageFactoryにします (このオプションにより、シングル ログアウトも使用できなくなります)。
于 2014-12-05T10:51:49.240 に答える