/ / Problema de resolución de DNS de SAML - java, spring-security, spring-saml

Problema de resolución de DNS de SAML - java, spring-security, spring-saml

Tenemos una aplicación utilizando el Spring SAMLExtensión y lo hemos configurado como un SP que funciona ejecutándose en localhost contra SSOCircle. Ahora hemos implementado en el entorno de prueba de nuestro cliente y estamos tratando de que funcione con el IDP de nuestro cliente.

Le dimos nuestros metadatos al IDP, sustituyendo http://myapp-test.acme.com:8080/myapp/saml/SSO para http://localhost:8080/myapp/saml/SSO.

Después de la autenticación, vemos esto en los registros:

o.s.s.s.m.MetadataGeneratorFilter - URL de base de entidad predeterminada generada http://someappserver.acme.com:8080/myapp Basado en valores en la primera solicitud de servidor.

org.opensaml.common.SAMLException: Destino previsto http://myapp-test.acme.com:8080/myapp/saml/SSO no coincide con ninguna de las URL de punto final para la urna de perfil: oasis: nombres: tc: SAML: 2.0: perfiles: SSO: navegador

En la ventana del navegador, vemos que la solicitud va a http://someappserver.acme.com:8080/myapp/saml/SSO.

Asi que http://myapp-test.acme.com:8080/myapp/saml/SSO resuelve a

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

¿Cómo podemos cambiar nuestro código / configuración para manejar esto? No creo que debamos codificar los metadatos al servidor de aplicaciones.

Respuestas

3 para la respuesta № 1

Las URL en los metadatos del Proveedor de servicios deben corresponder a las URL reales donde su Proveedor de servicios recibe mensajes SAML de IDP. En este caso los dos difieren.

Puedes actualizar tu securityContext.xml y cambiar frijol metadataGeneratorFilter proporcionando propiedad entityBaseURL, con la URL correcta, por ej .:

<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>

Sin establecer esta propiedad, Spring SAML define el entityBaseURL y genera metadatos con él basado en el primerSolicite que reciba. En caso de que su aplicación esté disponible en múltiples URL, ésta puede ser, por supuesto, una URL diferente a la que realmente le envía su IDP.

En caso de que la URL interna vista por elel servidor de aplicaciones difiere de la URL utilizada por la persona que llama (como en su caso con la resolución DNS), puede forzar a Spring SAML a pensar que se implementó detrás de una URL pública específica cambiando el bean contextProvider a:

<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>

Puede encontrar más detalles en el capítulo del manual de Spring SAML Proxies inversos y balanceadores de carga.