Hallo,
meine einstellung ist so.
Shinyproxy läuft in einem Docker-Container mit dem Namen Shiny-Proxy.
Apache httpd Reverse Proxy läuft vor Shinyproxy und konvertiert ihn in https und läuft auf dem Host mit Port 2443
keycloak wird auch im Docker-Container ausgeführt, aber der Port ist auf dem Host mit 8443 geöffnet.
setup, application.xml
keycloak:
realm: shiny
auth-server-url: https://keycloak:8443/auth
#ssl-required: none
ssl-required: external
confidential-port: 2443
verify-token-audience: true
resource: shiny-proxy-p1
credentials-secret: xxxxxxxxxxxx
Apache Reverse-Proxy-Konfiguration
<VirtualHost *:2443>
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/server-cert.pem
SSLCertificateKeyFile /etc/apache2/ssl/server-cert.key
# Server Certificate Chain:
# Point SSLCertificateChainFile at a file containing the
# concatenation of PEM encoded CA certificates which form the
# certificate chain for the server certificate. Alternatively
# the referenced file can be the same as SSLCertificateFile
# when the CA certificates are directly appended to the server
# certificate for convinience.
SSLCertificateChainFile /etc/apache2/ssl/server-ca.crt
<Proxy *>
Allow from *
</Proxy>
RewriteEngine on
RewriteCond %{HTTP:Upgrade} =websocket
RewriteRule /(.*) ws://shiny-proxy:8080/$1 [P,L]
RewriteCond %{HTTP:Upgrade} !=websocket
RewriteRule /(.*) http://shiny-proxy:8080/$1 [P,L]
ProxyPass / http://shiny-proxy:8080/
ProxyPassReverse / http://shiny-proxy:8080/
ProxyRequests Off
ErrorLog ${APACHE_LOG_DIR}/proxy_error.log
CustomLog ${APACHE_LOG_DIR}/proxy_access.log combined
</VirtualHost>
Nehmen wir an, wenn Sie über Apache mit der URL https://lxsqlpocnd04 :2443/ auf Shinyprox zugreifen
Es wird auf die Anmeldeseite und die Umleitungsanforderung der Anmeldeseite auf den Keycloak-Host lxsqlpocnd04 und Port 8443 umgeleitet. In dieser URL befindet sich eine Abfragezeichenfolge, die redirect_uri enthält, aber nicht die erwartete.
die URL ist so
https://lxsqlpocnd04 :8443/auth/realms/shiny/protocol/openid-connect/auth?response_type=code&client_id=shiny-proxy-p1&redirect_uri=http%3A%2F%2Fshiny-proxy%3A8080%2Fsso=005e e6a9-4768-8cf8-39d77500fea3&login=true&scope=openid
Und die redirect_uri ist http:// shiny https://lxsqlpocnd04 :2443/sso/login
könnte jemand helfen?
Vielen Dank,
Robin
Hast du das in application.yml eingestellt?
server:
useForwardHeaders: true
Von hier: https://www.shinyproxy.io/security/#https -ssl-tls
Ich bin mir nicht sicher, was das Apache-Äquivalent ist, aber in nginx behebt dies wahrscheinlich Ihr Problem:
proxy_set_header Host $http_host;
@aiham Danke.
Ich habe es funktioniert. Es liegt an fehlenden useForwardHeaders: true
Ich benutze useForwardHeaders: true, habe aber immer noch das Problem
@danielfm123
Ich benutze useForwardHeaders: true, habe aber immer noch das Problem
Es gibt eine weitere Möglichkeit im Zusammenhang mit SSL-Zertifikaten. Wenn Ihre auf Keycloak installierten Zertifikate nicht öffentlich vertrauenswürdig sind (die Stamm- und Zwischenzertifizierungsstelle befinden sich nicht in der Standard-Vertrauensliste von Java), müssen Sie sie der vertrauenswürdigen JRE-Standardzertifizierungsstelle hinzufügen. Die JRE ist diejenige, die Ihren Shinyproxy betreibt.
der Standardspeicherort ist JAVA_HOME ---> JRE --> lib ---> Sicherheit --> cacerts JAVA_HOME ---> JRE --> lib ---> Sicherheit --> cacerts
Befehle zum Importieren wie folgt.
keytool -import -noprompt -alias -your-root -file /opt/jboss/your-root.crt -keystore /etc/pki/java/cacerts -storepass changeit
Ich habe es getan, es funktioniert nicht, ich habe Shinyproxy 2.3.1 anstelle von 2.4.1 ausprobiert und es sendet die richtige redirect_uri, funktioniert aber nur in einigen Browsern, im Rest bekomme ich err_too_many_redirects
Sind Ihre Zertifikate öffentlich vertrauenswürdig? Ich bin während der Testphase darauf gestoßen, dass die Zertifikate nicht öffentlich vertrauenswürdig sind. Sie müssen die Stammzertifizierungsstelle und die Zwischenzertifizierungsstelle in den vertrauenswürdigen Browserspeicher importieren. Jeder Browser ist anders, hängt von Ihrem Betriebssystem und Browser ab. In meinem Fall verwende ich Windows, nachdem ich Certs in die vertrauenswürdige Zone importiert habe und sowohl IE als auch Chrome danach einwandfrei funktionieren.
Hier ist mein Vorschlag,
Es ist mit certbot validiert.... Ich habe es geschafft, es mit Shinyproxy 2.3.1 und einem anderen Active Directory-Konto zum Laufen zu bringen...
Aber es gibt einen Fehler bei Shinyproxy 2.4.1 und 2.4.0
Hallo @danilfm123 , ich habe hier ein paar Dinge überprüft, und ich kann keine Probleme mit redirect_uri in ShinyProxy 2.4.0/1 reproduzieren.
Können Sie mit den folgenden Informationen eine neue Ausgabe eröffnen? Auf diese Weise kann ich nachschauen und sehen, ob es einen Fehler gibt.
Ich habe das gleiche Problem.
Die Einrichtung mit keycloak, Apache2 Reverse Proxy und Shinyproxy 2.3.1 funktioniert einwandfrei. Ich betreibe Shinyproxy über Docker. Shinyproxy leitet korrekt an https://testauth.example.com weiter.
Wenn ich auf Shinyproxy 2.4.1 wechsle, enthält der redirect_uri die interne IP (http://192.168.51.27:8082) anstelle der von außen erreichbaren Adresse und ich erhalte eine Fehlermeldung: "Ungültiger Parameter: redirect_uri".
Dies ist der relevante Teil meiner application.yml:
proxy:
title: AUTHTEST
hide-navbar: false
template-path: /templates
favicon-path: /www/favicon.png
heartbeat-rate: 10000
heartbeat-timeout: 600000
port: 8080
admin-groups: admin
container-wait-time: 30000
authentication: keycloak
keycloak:
realm: shinyr
auth-server-url: http://192.168.51.122:8080/auth
resource: shinyr
credentials-secret: <secret>
docker:
internal-networking: true
specs:
- id: test
display-name: Euler App
description: Test App
container-cmd: ["R", "-e", "shiny::runApp('/root/euler')"]
container-image: saletelligence/test
container-network: authtest_authtest_net
access-groups: [admin, pm]
logging:
file:
shinyproxy.log
server:
useForwardHeaders: true
Dies ist die Apache-Konfiguration:
<VirtualHost *:443>
RequestHeader set X-Forwarded-Proto "https"
RequestHeader set X-Forwarded-Port "443"
ServerName testauth.example.com
RewriteEngine On
RewriteCond %{HTTP:Upgrade} =websocket
RewriteRule /(.*) ws://192.168.51.27:8082/$1 [P,L]
RewriteCond %{HTTP:Upgrade} !=websocket
RewriteRule /(.*) http://192.168.51.27:8082/$1 [P,L]
ProxyRequests Off
ProxyPass "/" "http://192.168.51.27:8082/"
ProxyPassReverse "/" "http://192.168.51.27:8082/"
SSLProxyEngine On
SSLEngine On
SSLCertificateFile /etc/apache2/sslcert/example.crt
SSLCertificateKeyFile /etc/apache2/sslcert/example_pem.key
SSLCACertificateFile /etc/apache2/sslcert/example_bundle.pem
</VirtualHost>
Hallo @eastclintw00d
Bitte versuchen Sie Folgendes zu verwenden:
server:
forward-headers-strategy: "native"
Anstatt
server:
useForwardHeaders: true
Vielen Dank!
Hallo @LEDfan
Das hat das Problem gelöst.
Danke, für die schnelle Antwort!
Das funktioniert, aber es tötet das Paket DT
@danielfm123 Sind Sie sicher, dass Sie Shinyproxy 2.4.1 ausführen? DT funktioniert bei mir einwandfrei.
@danilfm123 @eastclintw00d POST-Anfragen (wie zB von DT) funktionieren nicht, wenn OIDC mit aktuellem ShinyProxy (2.4.1) verwendet wird. Ein Fix von @LEDfan wird Teil einer kommenden Veröffentlichung sein, aber das ist nicht das Thema dieses Threads.
Das Problem mit der POST-Anfrage ist jetzt in der Version 2.4.2 behoben
Die Dokumentation zur ursprünglichen Ausgabe wird aktualisiert.
Ich werde diese Ausgabe sperren, damit die Ausgaben für uns wartbar bleiben.
Zögern Sie natürlich nicht, bei Problemen eine neue Ausgabe zu eröffnen!