Shinyproxy: Error de SAML: el punto final de destino previsto del mensaje SAML no coincide con el punto final del destinatario

Creado en 21 ene. 2021  ·  3Comentarios  ·  Fuente: openanalytics/shinyproxy

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?

question

Todos 3 comentarios

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:

  • Agilizar toda la configuración.

    • asegúrese de que la ruta de contexto que está configurada en ShinyProxy sea también la ruta de contexto que usará de manera efectiva cuando acceda a ShiynProxy. Digamos que accede a ShinyProxy en /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

    • ShinyProxy debe saber que se accede a él a través de HTTPS, incluso si el proxy inverso accede a ShinyProxy a través de HTTP. Esto se hace usando los encabezados 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).

    • use la opción Spring 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!

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

jfrubioz picture jfrubioz  ·  9Comentarios

fmmattioni picture fmmattioni  ·  3Comentarios

jat255 picture jat255  ·  3Comentarios

donarus picture donarus  ·  3Comentarios

xtrasimplicity picture xtrasimplicity  ·  5Comentarios