Soy bastante ingenuo sobre SAML y el marco de Spring en general, pero estoy tratando de configurar nuestro servidor ShinyProxy para usar el servidor SAML de mi organización, y recibo el siguiente error después de lo que parece ser una autenticación exitosa:
2021-01-21 19:22:52.748 ERROR 1 --- [ XNIO-1 task-1] o.o.c.b.decoding.BaseSAMLMessageDecoder : SAML message intended destination endpoint 'https://myapphost/saml/SSO' did not match the recipient endpoint 'http://myapphost/scheduler/saml/SSO'
El problema parece estar relacionado con algo relacionado con el protocolo https
/ http
que no coincide. Esta aplicación está detrás de un proxy inverso Apache, que por lo que he leído podría estar causando el problema. El RP redirige desde https: // myhostname / myapp al puerto de host 8888 de Docker expuesto (como se define en mi archivo application.yml
).
La configuración de apache para este proxy remoto es:
# Websocket stuff
# Needs the rewrite and proxy_wstunnel modules.
RewriteEngine On
RewriteCond %{HTTP:Upgrade} =websocket [NC]
RewriteRule /scheduler/(.*) ws://127.0.0.1:8888/myapp/$1 [P,L]
#
# Docker stuff for the scheduler. Requires the proxy_http
# module to be enabled.
ProxyPass /myapp http://127.0.0.1:8888/myapp
ProxyPassReverse /myapp http://127.0.0.1:8888/myapp
Algunas páginas relacionadas que encontré en mi búsqueda:
Aquí está mi application.yml (con cierta información privada cambiada / eliminada):
proxy:
authentication: saml
title: My app
favicon: file:///opt/shinyproxy/templates/favicon.ico
admin-groups: admins
logo-url: file:///opt/shinyproxy/templates/my_logo.png
template-path: /opt/shinyproxy/templates/mytemplate
bind-address: 0.0.0.0
port: 8888
# change the landing-page to restrict shinyproxy to one application:
landing-page: /myapp/app/myapp
saml:
idp-metadata-url: <URL TO metadata XML>
app-entity-id: <MY APP's DEPLOYMENT PATH>
app-base-url: <MY APP's DEPLOYMENT PATH>
name-attribute: http://schemas.xmlsoap.org/ws/2005/05/identity/claims/upn
roles-attribute: http://schemas.microsoft.com/ws/2008/06/identity/claims/role
support:
mail-to-address: [email protected]
docker:
internal-networking: true
container-network: shinyproxy-net
container-log-path: ./container-logs
specs:
- id: myapp
display-name: My tool
description: Description for my app
container-cmd: ["R", "-e", "shiny::runApp('/root')"]
container-image: my-image
container-network: "${proxy.docker.container-network}"
# for email
spring:
mail:
host: my.smtp.server
# TLS: 587 SSL: 465 Plain: 25
port: 25
server:
useForwardHeaders: true
forward-headers-strategy: native
servlet.session.timeout: 3600
servlet:
context-path: /myapp
logging:
file:
shinyproxy.log
He intentado esto con ShinyProxy 2.4.3 implementado en Docker usando el siguiente Dockerfile:
FROM openjdk:8-jre
RUN mkdir -p /opt/shinyproxy/
RUN wget https://www.shinyproxy.io/downloads/shinyproxy-2.4.3.jar -O /opt/shinyproxy/shinyproxy.jar
COPY application.yml /opt/shinyproxy/application.yml
COPY templates/ /opt/shinyproxy/templates/
WORKDIR /opt/shinyproxy/
CMD ["java", "-jar", "/opt/shinyproxy/shinyproxy.jar"]
¿Alguna idea si puedo solucionar este problema cambiando un ajuste de configuración en algún lugar?
Hola @ jat255
Este error suele ocurrir cuando accede a ShinyProxy a través de un equilibrador de carga o proxy inverso en una ruta (/ URL) diferente a la configurada en ShinyProxy. Creo que este también es el caso aquí.
Por ejemplo, este es el caso cuando accede a ShinyProxy usando https://mydomain/scheduler
y el proxy reenvía estas solicitudes a https://mydomain/myapp
.
Hay dos soluciones para esto:
/abcd
luego asegúrese de que el proxy esté configurado para reenviar solicitudes en /abcd
a /abcd
en ShinyProxy y asegúrese de configurar la ruta de contexto en ShinyProxy para que sea /abcd
X-Forwarded-Proto
y X-Forwarded-For
. Veo que ya tiene ShinyProxy configurado para verificar estos encabezados, sin embargo, creo que también debe configurar apache para establecer los encabezados correctos (consulte https://webmasters.stackexchange.com/a/107445 y https: // serverfault. com / a / 257643/261145 o cualquier otro recurso).SAMLContextProviderLB
(https://github.com/openanalytics/containerproxy/pull/32). Creo que ya eliges por esta ruta.@LEDfan gracias por la respuesta!
RE: su primer punto, creo que tengo toda mi configuración configurada correctamente, no cambiar scheduler
a myapp
en mi configuración de apache publicada fue solo un artefacto de no redactar completamente mis archivos de configuración, ¡Ups! ! Lo que no creo que haya configurado son los encabezados X-Forwarded-Proto
y X-Forwarded-For
en Apache. Creo que lo tengo funcionando usando la opción SAMLContextProviderLB
, pero preferiría poder usar la compilación nativa de ShinyProxy para que tengamos menos cosas que mantener. Le daré una oportunidad a los encabezados e informaré aquí si funciona.
Ok, agregué esos encabezados y confirmé que las cosas parecen funcionar correctamente. ¡Gracias por tu ayuda!