Hola,
He intentado configurar ShinyProxy solo en https. Esto parece posible según la documentación: https://www.shinyproxy.io/security/#https -ssl-tls
Tenga en cuenta que cuando solo https está disponible (es decir, no hay redirecciones desde http configuradas en nginx), es necesario agregar lo siguiente al archivo application.yml para poder usar encabezados de reenvío:
servidor:
useForwardHeaders: verdadero
El problema es que cuando se configura solo con https, entrada de NGINX y OpenID, el esquema https no pasa de la entrada de NGINX al contenedor ShinyProxy, lo que a su vez causa una serie de problemas con OpenId. A saber:
La razón por la que esto sucede se debe a que ShinyProxy usa los códigos predeterminados aquí: spring-security DefaultOAuth2AuthorizationRequestResolver.java # L141
@garyallenkt ¿
¡Gracias!
¿Alguna actualización sobre este tema?
OpenAnalytics hizo un gran trabajo para ayudar a resolver esto.
Debería poder obtener la última versión de ShinyProxy (2.3.0) y seguir la documentación actualizada aquí: https://www.shinyproxy.io/security/#https -ssl-tls
La mejor de las suertes.
Hola @garyallenkt ,
Gracias por tu pronta respuesta. Probé con la última versión pero el problema persiste en mi caso. Estoy incrustando todo el shinyproxy en Iframe. Para iniciar sesión, el servidor redirige la conexión HTTPS a la conexión HTTP que no está permitida por la mayoría de los navegadores. ¿Sabes cómo puedo solucionar esto?
Saludos
@fmichielssen
Estoy usando una bifurcación del repositorio de niños de Telethon y ellos también usan 2.3.0, pero solo para estar seguro, también extraje la imagen de openanalytics. Para su referencia, aquí están mis configuraciones.
docker_compose.yaml
version: "3.6"
services:
nginx:
image: nginx:alpine
container_name: tki_nginx
restart: on-failure
networks:
- tki-net
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
- ./data/certbot/conf:/etc/letsencrypt
- ./data/certbot/www:/var/www/certbot
ports:
- 80:80
- 443:443
command: "/bin/sh -c 'while :; do sleep 6h & wait $${!}; nginx -s reload; done & nginx -g \"daemon off;\"'"
depends_on:
- shinyproxy
certbot:
image: certbot/certbot
container_name: certbot
restart: on-failure
volumes:
- ./data/certbot/conf:/etc/letsencrypt
- ./data/certbot/www:/var/www/certbot
entrypoint: "/bin/sh -c 'trap exit TERM; while :; do certbot renew; sleep 12h & wait $${!}; done;'"
influxdb:
image: influxdb:1.7.3-alpine
container_name: tki_influxdb
restart: on-failure
volumes:
- ./run_first_time.sh:/home/run_first_time.sh
- type: volume
source: shinyproxy_usage
target: /var/lib/influxdb
volume:
nocopy: true
networks:
- tki-net
ports:
- 8083:8083
- 8086:8086
shinyproxy:
depends_on:
- influxdb
image: openanalytics/shinyproxy
container_name: open_analytics_shinyproxy
restart: on-failure
networks:
- tki-net
volumes:
- ./application.yml:/opt/shinyproxy/application.yml
- /var/run/docker.sock:/var/run/docker.sock
expose:
- 8080
networks:
tki-net:
name: tki-net
volumes:
shinyproxy_usage:
application.yaml
proxy:
title: Lorem ipsum
hide-navbar: true
landing-page: /
heartbeat-rate: 10000
heartbeat-timeout: 600000
port: 8080
docker:
internal-networking: true
authentication: openid
openid:
auth-url: https://lorem-ipsum.auth0.com/authorize
token-url: https://lorem-ipsumauth0.com/oauth/token
jwks-url: https://lorem-ipsum.auth0.com/.well-known/jwks.json
client-id: SUPERCOOL
client-secret: SUPERCOOLSECRET
server:
useForwardHeaders: true
specs:
- id: lorem_ipsum
display-name: Lorem Ipsum
description:
container-cmd: ["R", "-e", "shiny::runApp('/root/app')"]
container-image: lorem/ipsum
container-network: tki-net
container-env:
user: "shiny"
environment:
- APPLICATION_LOGS_TO_STDOUT=false
usage-stats-url: http://influxdb:8086/write?db=shinyproxy_usagestats
y nginx.conf
worker_processes 1;
events {
worker_connections 1024;
}
http {
sendfile on;
upstream tki_shinyproxy {
server open_analytics_shinyproxy:8080;
}
server {
listen 80;
server_name example.org;
server_tokens off;
}
server {
listen 443;
server_name example.org;
server_tokens off;
ssl on;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
# SSL
ssl_certificate /etc/letsencrypt/live/example.org/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.org/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
location / {
proxy_pass http://tki_shinyproxy;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 600s;
proxy_redirect off;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
}
¿Alguna posible actualización sobre esto? @garyallenkt @fmichielssen
Se las arregló para arreglarlo.
Este codigo
server:
useForwardHeaders: true
debe estar fuera de proxy:
server
es de hecho un bloque de nivel superior y no está dentro de proxy
Desafortunadamente, tengo el mismo problema con shinyproxy 2.3.1
Tengo este bloque fuera del bloque de proxy en el archivo application.yml
servidor:
useForwardHeaders: verdadero
y tengo el proxy Nginx configurado exactamente como se describe en la documentación. Yo también (para probar si acabo de cometer un error tonto de ngnix configuré un servidor Apache y tuve exactamente el mismo problema).
Mis bloques de configuración de Nginx son:
server {
listen 80;
server_name mydomain.com;
rewrite ^(.*) https://$server_name$1 permanent;
}
server {
listen 443 ssl;
server_name mydomain.com;
access_log /var/log/nginx/shinyproxy.access.log;
error_log /var/log/nginx/shinyproxy.error.log error;
ssl on;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_certificate <path to crt>
ssl_certificate_key <path to key>
location / {
proxy_pass http://127.0.0.1:3600/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 600s;
proxy_redirect off;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
¿Alguien tiene alguna idea sobre lo que podría estar mal? o incluso pensamientos sobre cómo solucionarlo?
Cual es el error? ¿Puedes compartir tus archivos de configuración como lo hice yo? Tal vez yo pueda ayudarte
@greenspray ¡ gracias por echar un vistazo! ¡Realmente estoy tan perplejo con esto! Mi Nginx lo configuró en el comentario anterior, y así es como se ve mi application.yml:
Aparte de cambiar el puerto y agregar la línea de encabezado serverforward, he intentado mantener todo exactamente como estaba instalado. Incluso probé esto con el proxy brillante 2.3.0 ya que parecía funcionar para todos en este hilo, pero tenía el mismo problema.
proxy:
title: My Title
logo-url: http://www.openanalytics.eu/sites/www.openanalytics.eu/themes/oa/logo.png
landing-page: /
heartbeat-rate: 10000
heartbeat-timeout: 60000
port: 3600
authentication: simple
admin-groups: scientists
users:
- name: jack
password: password1
groups: scientists
- name: jeff
password: password1
groups: mathematicians
# Docker configuration
docker:
cert-path: /home/none
url: http://localhost:2375
port-range-start: 20000
specs:
- id: 01_hello
display-name: Hello Application
description: Application which demonstrates the basics of a Shiny app
container-cmd: ["R", "-e", "shinyproxy::run_01_hello()"]
container-image: openanalytics/shinyproxy-demo
access-groups: [scientists, mathematicians]
server:
useForwardHeaders: true
logging:
file:
shinyproxy3.log
También probé usando apache como servidor web en su lugar, y tengo el mismo problema. Mis dos teorías actuales son que algo está mal con la configuración de mi application.yml, o que debido a que no entiendo el proxy / proxy inverso, algo en mi bloque de proxy está permitiendo la redirección a http.
@ Claire-Kelley, ¿cuál es tu error exacto?
@ greenspray9 ¡No recibo ningún error! Funciona perfectamente, de modo que cuando voy a mi sitio web puedo ver la página de inicio de sesión del proxy brillante y se sirve a través de HTTPS (este es el comportamiento deseado). El problema es que cuando inicio sesión (usando autenticación simple por ahora) la página comienza a ser servida a través de HTTP (no HTTPS, ¡este es el problema!)
@ ckelley-ct Lo siento, no tengo experiencia con el tipo de inicio de sesión que desea. ¿Quizás está ocurriendo algún tipo de redireccionamiento?
Tengo el mismo problema, ¿encontraste una solución?
@ HEPBO3AH sí, lo hice, para mí el problema fue con la imagen insegura (la línea logo-url: http://www.openanalytics.eu/sites/www.openanalytics.eu/themes/oa/logo.png en el código de ejemplo anterior). Si cambia eso a una imagen servida a través de https o la elimina, el problema se resuelve.
@ HEPBO3AH @ ckelley-ct FYI, hemos movido la imagen a https://www.openanalytics.eu/shinyproxy/logo.png
Logré hacer el proxy inverso con nginx e iniciar sesión de forma segura usando autenticación simple, pero una vez que intento usar openid falla porque usa http como protocolo de devolución de llamada:
https://login.microsoftonline.com/9ac05e7d-e6a1-433a-9801-a60642903c2b/oauth2/authorize?response_type=code&client_id=d1abf394-b312-4717-a1c4-daaeee4f3b28&scope=openid%20email&state=5ZEbvVrVKBGpwId02I91SNRN-oPSbqkSR9oOlj7PRRQ%3D&redirect_uri=http : //52.152.166.27/login/oauth2/code/shinyproxy&nonce=EhOFxVuVRksPOxd0hG-CKPDd2s78bhFIzSSC_PPU5-Q
obteniendo el error AADSTS50011: La URL de respuesta especificada en la solicitud no coincide con las URL de respuesta configuradas para la aplicación: 'd1abf394-b312-4717-a1c4-daaeee4f3b28'.
Esta es mi aplicación.yml para shinyproxy 2.4.0, shiny proxy 2.3.1 parece funcionar desde microsoft edge
proxy:
title: Open Analytics Shiny Proxy
logo-url: https://www.openanalytics.eu/shinyproxy/logo.png
landing-page: /
heartbeat-rate: 10000
heartbeat-timeout: 60000
port: 8080
authentication: openid
admin-groups: scientists
#bind-address: 127.0.0.1
# Example: 'simple' authentication configuration
users:
- name: jack
password: password
groups: scientists
- name: jeff
password: password
groups: mathematicians
# Example: 'openid' authentication configuration
openid:
auth-url: https://login.microsoftonline.com/9ac05e7d-e6a1-433a-9801-a60642903c2b/oauth2/authorize
token-url: https://login.microsoftonline.com/9ac05e7d-e6a1-433a-9801-a60642903c2b/oauth2/token
jwks-url: https://login.microsoftonline.com/common/discovery/keys
client-id: d1abf394-b312-4717-a1c4-daaeee4f3b28
client-secret: xxx
# Docker configuration
docker:
container-backend: docker
port-range-start: 20000
container-protocol: https
specs:
- id: euler
display-name: Euler's number
#container-cmd: ["R", "-e", "shiny::runApp('/root/euler')"]
container-image: euler
access-groups: scientists
server:
useForwardHeaders: true
logging:
file:
shinyproxy.log
Logré hacer el proxy inverso con nginx e iniciar sesión de forma segura usando autenticación simple, pero una vez que intento usar openid falla porque usa http como protocolo de devolución de llamada:
https://login.microsoftonline.com/9ac05e7d-e6a1-433a-9801-a60642903c2b/oauth2/authorize?response_type=code&client_id=d1abf394-b312-4717-a1c4-daaeee4f3b28&scope=openid%20email&state=5ZEbvVrVKBGpwId02I91SNRN-oPSbqkSR9oOlj7PRRQ%3D&redirect_uri=http : //52.152.166.27/login/oauth2/code/shinyproxy&nonce=EhOFxVuVRksPOxd0hG-CKPDd2s78bhFIzSSC_PPU5-Q
obteniendo el error AADSTS50011: La URL de respuesta especificada en la solicitud no coincide con las URL de respuesta configuradas para la aplicación: 'd1abf394-b312-4717-a1c4-daaeee4f3b28'.
mismo error para mí con 2.4
Hola @ danielfm123 , @ roberts2727 así que con ShinyProxy 2.4 la siguiente configuración ya no funcionará:
server:
useForwardHeaders: true
en su lugar tienes que usar:
server:
forward-headers-strategy: native
¿Puede informarnos si esto le resuelve el problema?
¡Problema resuelto! Gracias Señor.
Sí, funciona pero mata el paquete DT
ShinyProxy 2.4 la siguiente conf
¿Valdría la pena mencionar eso en https://www.shinyproxy.io/security/?
Hola @shosaco, esto ya está agregado a nuestro nuevo sitio web: https://www.shinyproxy.io/documentation/security/#forward -headers. La URL a la que apunta es un resto del sitio web anterior, que ahora limpié.
Comentario más útil
Se las arregló para arreglarlo.
Este codigo
debe estar fuera de
proxy: