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?
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:
/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 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).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!