Shinyproxy: SAML-Fehler: Der beabsichtigte Zielendpunkt der SAML-Nachricht stimmte nicht mit dem Empfängerendpunkt überein

Erstellt am 21. Jan. 2021  ·  3Kommentare  ·  Quelle: openanalytics/shinyproxy

Ich bin ziemlich naiv in Bezug auf SAML und das Spring-Framework im Allgemeinen, aber ich versuche, unseren ShinyProxy-Server so zu konfigurieren, dass er den SAML-Server meiner Organisation verwendet, und erhalte die folgende Fehlermeldung nach einer scheinbar erfolgreichen Authentifizierung:

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'

Das Problem scheint damit zusammenzuhängen, dass das Protokoll https / http nicht übereinstimmt. Diese App befindet sich hinter einem Apache-Reverse-Proxy, der nach dem, was ich gelesen habe, das Problem verursachen könnte. Der RP leitet von https://myhostname/myapp zum exponierten Docker-Host-Port 8888 (wie in meiner application.yml Datei definiert) um.

Die Apache-Konfiguration für diesen Remote-Proxy lautet:

# 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

Einige verwandte Seiten, die ich bei meiner Suche gefunden habe:

Hier ist meine application.yml (mit einigen privaten Informationen geändert/entfernt):

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

Ich habe dies mit ShinyProxy 2.4.3 versucht, das in Docker mit dem folgenden Dockerfile bereitgestellt wird:

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

Irgendwelche Ideen, ob ich dieses Problem beheben kann, indem ich irgendwo eine Konfigurationseinstellung ändere?

question

Alle 3 Kommentare

Hallo @jat255

Dieser Fehler tritt normalerweise auf, wenn Sie auf ShinyProxy über einen Load Balancer oder Reverse-Proxy über einen anderen Pfad (/URL) als den in ShinyProxy konfigurierten zugreifen. Ich denke, das ist hier auch der Fall.
Dies ist beispielsweise der Fall, wenn Sie mit https://mydomain/scheduler auf ShinyProxy zugreifen und der Proxy diese Anfragen an https://mydomain/myapp weiterleitet.

Dafür gibt es zwei Lösungen:

  • Optimieren Sie alle Konfigurationen.

    • Stellen Sie sicher, dass der in ShinyProxy konfigurierte Kontextpfad auch der Kontextpfad ist, den Sie effektiv beim Zugriff auf ShiynProxy verwenden. Nehmen wir an, Sie greifen auf ShinyProxy unter /abcd und stellen dann sicher, dass der Proxy so eingerichtet ist, dass er Anfragen unter /abcd an /abcd auf ShinyProxy weiterleitet, und stellen Sie sicher, dass Sie den Kontextpfad in ShinyProxy auf /abcd konfigurieren

    • ShinyProxy sollte wissen, dass über HTTPS darauf zugegriffen wird, auch wenn der Reverse-Proxy über HTTP auf ShinyProxy zugreift. Dies geschieht mit den Headern X-Forwarded-Proto und X-Forwarded-For . Ich sehe, dass Sie ShinyProxy bereits konfiguriert haben, um nach diesen Headern zu suchen, aber ich denke, Sie müssen auch Apache konfigurieren, um die richtigen Header festzulegen (siehe https://webmasters.stackexchange.com/a/107445 und https://serverfault. com/a/257643/261145 oder eine andere Quelle).

    • Verwenden Sie die Option Spring SAMLContextProviderLB (https://github.com/openanalytics/containerproxy/pull/32). Ich denke, Sie haben sich bereits für diese Route entschieden.

@LEDfan danke für die Antwort!

RE: Ihr erster Punkt, ich glaube, ich habe alle meine Konfigurationen richtig eingerichtet, nicht scheduler in myapp in meiner geposteten Apache-Konfiguration zu ändern, war nur ein Artefakt, meine Konfigurationsdateien nicht vollständig zu redigieren, whoops ! Was ich glaube nicht eingerichtet habe, sind die Header X-Forwarded-Proto und X-Forwarded-For auf Apache. Ich glaube, es funktioniert mit der Option SAMLContextProviderLB , aber ich möchte lieber den nativen ShinyProxy-Build verwenden, damit wir weniger Dinge warten müssen. Ich werde die Header mal ausprobieren und hier berichten, ob es funktioniert.

Ok, ich habe diese Header hinzugefügt und bestätigt, dass die Dinge richtig zu funktionieren scheinen. Danke für deine Hilfe!

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

lucius-verus-fan picture lucius-verus-fan  ·  8Kommentare

lucius-verus-fan picture lucius-verus-fan  ·  7Kommentare

algo-se picture algo-se  ·  6Kommentare

PauloJhonny picture PauloJhonny  ·  8Kommentare

jfrubioz picture jfrubioz  ·  9Kommentare