Hola,
mi configuración es así.
shinyproxy se ejecuta en un contenedor de ventana acoplable con el nombre shiny-proxy.
Apache httpd reverse proxy se ejecuta antes de shinyproxy y lo convierte a https y se ejecuta en el host con el puerto 2443
keycloak también se ejecuta en el contenedor de la ventana acoplable, pero el puerto está abierto en el host con 8443.
configuración, 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
configuración de proxy inverso apache
<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>
Digamos cuando accede a shinyprox a través de apache con URL https: // lxsqlpocnd04 : 2443 /
redirigirá a la página de inicio de sesión y la página de inicio de sesión redireccionará la solicitud al host de Keycloak lxsqlpocnd04 y al puerto 8443. en esa URL hay una cadena de consulta que incluye redirect_uri pero no es la esperada.
la URL es así
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% 2Flogin & state- 00f5e087 e6a9-4768-8cf8-39d77500fea3 & login = true & scope = openid
Y el redirect_uri es http: // shiny-proxy : 8080 / sso / login que no sea https: // lxsqlpocnd04 : 2443 / sso / login
alguien podria ayudar?
Gracias,
Robin
¿Estableciste esto en application.yml?
server:
useForwardHeaders: true
Desde aquí: https://www.shinyproxy.io/security/#https -ssl-tls
No estoy seguro de cuál es el equivalente de Apache, pero en nginx esto es probablemente lo que soluciona su problema:
proxy_set_header Host $http_host;
@aiham Gracias.
Lo tengo funcionando. Es debido a que falta useForwardHeaders: true
estoy usando useForwardHeaders: true pero todavía tengo el problema
@ danielfm123
estoy usando useForwardHeaders: true pero todavía tengo el problema
Existe otra posibilidad relacionada con los certificados SSL. Si sus certificados instalados en Keycloak no son de confianza pública (la CA raíz e intermedia no están en la lista de confianza predeterminada de Java), debe agregarlos en la CA de confianza predeterminada de JRE. El JRE es el que ejecuta su Shinyproxy.
la ubicación predeterminada es JAVA_HOME ---> JRE -> lib ---> seguridad -> cacerts JAVA_HOME ---> JRE -> lib ---> seguridad -> cacerts
comandos para importar como este.
keytool -import -noprompt -alias -your-root -file /opt/jboss/your-root.crt -keystore / etc / pki / java / cacerts -storepass changeit
Lo hice, no funciona, probé shinyproxy 2.3.1 en lugar de 2.4.1 y envía el redirect_uri correcto, pero solo funciona en algunos navegadores, en el resto obtengo err_too_many_redirects
¿Sus certificados son de confianza pública? Me encontré con esto durante la fase de prueba, los certificados no son de confianza pública. Debe importar la CA raíz y la CA intermedia a la tienda de confianza del navegador. Cada navegador es diferente, depende de su sistema operativo y navegador. En mi caso, estoy usando Windows, después de importar certificados a la zona de confianza y tanto IE como Chrome funcionan bien después de eso.
Aquí está mi sugerencia,
Está validado con certbot ... Me las arreglé para hacerlo funcionar con shinyproxy 2.3.1 y una cuenta de directorio activo diferente ...
Pero hay un error en shinyproxy 2.4.1 y 2.4.0
Hola @ danielfm123 , verifiqué algunas cosas aquí y no puedo reproducir ningún problema con redirect_uri en ShinyProxy 2.4.0 / 1.
¿Puede abrir un nuevo problema con la siguiente información? De esa forma puedo investigarlo y ver si hay un error.
Tengo el mismo problema.
La configuración con keycloak, proxy inverso apache2 y shinyproxy 2.3.1 funciona bien. Ejecuto shinyproxy a través de Docker. Shinyproxy redirige correctamente a https://testauth.example.com.
Cuando cambio a shinyproxy 2.4.1, redirect_uri contiene la IP interna (http://192.168.51.27:8082) en lugar de la dirección a la que se puede acceder desde el exterior y aparece un error: "Parámetro no válido: redirect_uri".
Esta es la parte relevante de mi 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
Esta es la configuración de apache:
<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>
Hola @ eastclintw00d
Intente utilizar:
server:
forward-headers-strategy: "native"
En lugar de
server:
useForwardHeaders: true
¡Gracias!
Hola @LEDfan
Eso resolvió el problema.
¡Gracias por la rápida respuesta!
Eso funciona pero mata el paquete DT
@ danielfm123 ¿Está seguro de que está ejecutando shinyproxy 2.4.1? DT está funcionando bien para mí.
@ danielfm123 @ eastclintw00d Las solicitudes POST (como las hizo, por ejemplo, DT) no funcionan cuando se usa OIDC con ShinyProxy actual (2.4.1). Una solución de @LEDfan será parte de un próximo lanzamiento, pero este no es el tema de este hilo.
El problema con la solicitud POST ahora se solucionó en la versión 2.4.2
Se actualiza la documentación relacionada con el problema original.
Bloquearé este problema para que podamos mantenerlos.
Por supuesto, como siempre, ¡no dude en abrir un nuevo número si encuentra algún problema!