/ / SAML DNS解決の問題 - java、spring-security、spring-saml

SAML DNS解決の問題 - java、spring-security、spring-saml

Spring SAMLを使用したアプリケーションがあります私たちはSSOCircleに対してlocalhostで動作するSPとして設定しました。私たちは現在、顧客のテスト環境に展開しており、顧客のIDPと連携するよう努めています。

IDPにメタデータを渡し、 http://myapp-test.acme.com:8080/myapp/saml/SSO ために http://localhost:8080/myapp/saml/SSO.

認証後、ログに次のように表示されます。

o.s.s.m.MetadataGeneratorFilter - 生成されたデフォルトエンティティのベースURL http://someappserver.acme.com:8080/myapp 最初のサーバー要求の値に基づいています。

org.opensaml.common.SAMLException:目的の宛先 http://myapp-test.acme.com:8080/myapp/saml/SSO oasis:names:tc:SAML:2.0:profiles:SSO:browserこれは、プロファイルurnのエンドポイントURLに一致しません。

ブラウザウィンドウでは、リクエストが http://someappserver.acme.com:8080/myapp/saml/SSO.

そう http://myapp-test.acme.com:8080/myapp/saml/SSO 解決する

http://someappserver.acme.com:8080/myapp/saml/SSO

これを処理するためにコード/設定を変更するにはどうすればよいですか?私は、アプリケーションサーバーにメタデータをハードコードする必要はないと思っています。

回答:

回答№1の場合は3

サービスプロバイダメタデータのURLは、サービスプロバイダがIDPからSAMLメッセージを受信した実際のURLに対応する必要があります。この場合、2つは異なる。

あなたはあなたの securityContext.xml 豆を変えて metadataGeneratorFilter 財産を提供することによって entityBaseURL正しいURLを使用してください(例:

<bean id="metadataGeneratorFilter" class="org.springframework.security.saml.metadata.MetadataGeneratorFilter">
<constructor-arg>
<bean class="org.springframework.security.saml.metadata.MetadataGenerator">
<property name="entityBaseURL" value="http://myapp-test.acme.com:8080/myapp"/>
</bean>
</constructor-arg>
</bean>

このプロパティを設定しないと、Spring SAMLでは entityBaseURL 最初のメタデータに基づいてメタデータを生成しますそれを受け取るよう要求する。あなたのアプリケーションが複数のURLで利用可能な場合、IDPが実際にメッセージを送信するURLとは異なるURLになります。

内部URLがアプリケーションサーバーが(あなたのDNS解決の場合のように)呼び出し元が使用したURLと異なる場合、Spring SAMLはBeanを変更することによって特定のパブリックURLの背後に展開されていると考えるように強制できます contextProvider に:

<bean id="contextProvider" class="org.springframework.security.saml.context.SAMLContextProviderLB">
<property name="scheme" value="http"/>
<property name="serverName" value="myapp-test.acme.com"/>
<property name="serverPort" value="8080"/>
<property name="includeServerPortInRequestURL" value="true"/>
<property name="contextPath" value="/myapp"/>
</bean>

Spring SAMLマニュアルの章で詳細を見つけることができます 逆プロキシとロードバランサ.