Salut,
J'ai essayé de configurer ShinyProxy sur https uniquement. Cela semble possible selon la documentation - https://www.shinyproxy.io/security/#https -ssl-tls
Notez que lorsque seul https est disponible (c'est-à-dire qu'aucune redirection depuis http configurée dans nginx), il est nécessaire d'ajouter ce qui suit au fichier application.yml afin d'utiliser les en-têtes de transfert :
serveur:
useForwardHeaders : vrai
Le problème est que lors de la configuration avec https uniquement, l'entrée NGINX et OpenID, le schéma https n'est pas transmis de l'entrée NGINX au conteneur ShinyProxy, ce qui provoque à son tour un certain nombre de problèmes avec OpenId. À savoir:
La raison pour laquelle cela se produit est due au fait que ShinyProxy utilise les codes par défaut ici - spring-security DefaultOAuth2AuthorizationRequestResolver.java # L141
@garyallenkt Avez-vous pu contourner ce problème ?
Merci!
Des mises à jour sur ce problème ?
OpenAnalytics a fait un excellent travail pour aider à résoudre ce problème.
Vous devriez pouvoir obtenir la dernière version de ShinyProxy (2.3.0) et suivre la documentation mise à jour ici - https://www.shinyproxy.io/security/#https -ssl-tls
Bonne chance.
Salut @garyallenkt ,
Merci pour votre réponse rapide. J'ai essayé avec la dernière version mais le problème persiste dans mon cas. J'intègre l'ensemble du shinyproxy dans Iframe. Pour se connecter, le serveur redirige la connexion HTTPS vers la connexion HTTP qui n'est pas autorisée par la majorité des navigateurs. Savez-vous comment je peux régler ça ?
Salutations
@fmichielssen
J'utilise un fork de Telethon kids repo et ils utilisent également 2.3.0, mais juste pour être sûr, j'ai également extrait l'image d'openanalytics. Pour votre référence, voici mes configs.
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
et 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;
}
}
}
Une éventuelle mise à jour à ce sujet ? @garyallenkt @fmichielssen
J'ai réussi à le réparer.
Ce code
server:
useForwardHeaders: true
doit être à l'extérieur proxy:
server
est en effet un bloc de niveau supérieur et non à l'intérieur de proxy
Malheureusement, j'ai le même problème avec shinyproxy 2.3.1
J'ai ce bloc en dehors du bloc proxy dans le fichier application.yml
serveur:
useForwardHeaders : vrai
et j'ai configuré le proxy Nginx exactement comme décrit dans la documentation. J'ai aussi (pour tester si je venais de faire une erreur stupide de ngnix en installant un serveur Apache et si j'avais exactement le même problème).
Mes blocs de configuration Nginx sont :
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;
}
}
Est-ce que quelqu'un a une idée de ce qui ne va pas ? ou même des réflexions sur la façon de le réparer?
Quelle est l'erreur ? Pouvez-vous partager vos fichiers de configuration comme je l'ai fait ? Peut-être je peux vous aider
@greenspray merci d'avoir jeté un coup d'œil! Je suis vraiment perplexe à ce sujet ! Mon Nginx le configure dans le commentaire ci-dessus, et voici à quoi ressemble mon application.yml :
Mis à part le changement de port et l'ajout de la ligne d'en-tête serverforward, j'ai essayé de tout conserver exactement tel qu'il a été installé. J'ai même testé cela avec le proxy brillant 2.3.0 car cela semblait fonctionner pour tout le monde sur ce fil, mais cela avait le même problème.
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
J'ai également testé en utilisant Apache comme serveur Web à la place, et j'ai le même problème. Mes deux théories actuelles sont que quelque chose ne va pas avec la configuration de mon application.yml , ou parce que je ne comprends pas bien le proxy / proxy inverse, quelque chose dans mon bloc proxy permet la redirection vers http.
@Claire-Kelley quelle est votre erreur exacte ?
@greenspray9 Je ne reçois pas d'erreur ! Cela fonctionne parfaitement pour que lorsque je vais sur mon site Web, je puisse voir la page de connexion proxy brillante et qu'elle soit servie via HTTPS (c'est le comportement souhaité). Le problème est que lorsque je me connecte (en utilisant une authentification simple pour le moment), la page commence à être servie via HTTP (pas HTTPS - c'est le problème !)
@ckelley-ct Désolé, je n'ai aucune expérience avec le type de connexion que vous souhaitez. Peut-être y a-t-il une sorte de redirection qui se produit?
J'ai le même problème, avez-vous trouvé une solution ?
@HEPBO3AH oui je l'ai fait - pour moi le problème était avec l'image non sécurisée (la ligne logo-url : http://www.openanalytics.eu/sites/www.openanalytics.eu/themes/oa/logo.png dans le exemple de code ci-dessus). Si vous la remplacez par une image diffusée via https ou la supprimez, le problème est résolu.
@HEPBO3AH @ckelley-ct Pour info, nous avons déplacé l'image vers https://www.openanalytics.eu/shinyproxy/logo.png
J'ai réussi à créer le proxy inverse avec nginx et à me connecter en toute sécurité à l'aide d'une authentification simple, mais une fois que j'ai essayé d'utiliser openid, cela échoue car il utilise http comme protocole de rappel :
https://login.microsoftonline.com/9ac05e7d-e6a1-433a-9801-a60642903c2b/oauth2/authorize?response_type=code&client_id=d1abf394-b312-4717-a1c4-daaeee4f3b28&scope=openid%02bqV91&stater=5ZERpj0b3b28&scope=openid%20bqV1abf394-b312-4717-a1c4-daaeee4f3b28&scope=openid%02bqV91&stater=5ZE //52.152.166.27/login/oauth2/code/shinyproxy&nonce=EhOFxVuVRksPOxd0hG-CKPDd2s78bhFIzSSC_PPU5-Q
obtenir l'erreur AADSTS50011 : l'URL de réponse spécifiée dans la demande ne correspond pas aux URL de réponse configurées pour l'application : 'd1abf394-b312-4717-a1c4-daaeee4f3b28'.
Ceci est mon application.yml pour shinyproxy 2.4.0, le proxy brillant 2.3.1 semble fonctionner à partir de 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
J'ai réussi à créer le proxy inverse avec nginx et à me connecter en toute sécurité à l'aide d'une authentification simple, mais une fois que j'ai essayé d'utiliser openid, cela échoue car il utilise http comme protocole de rappel :
https://login.microsoftonline.com/9ac05e7d-e6a1-433a-9801-a60642903c2b/oauth2/authorize?response_type=code&client_id=d1abf394-b312-4717-a1c4-daaeee4f3b28&scope=openid%02bqV91&stater=5ZERpj0b3b28&scope=openid%20bqV1abf394-b312-4717-a1c4-daaeee4f3b28&scope=openid%02bqV91&stater=5ZE //52.152.166.27/login/oauth2/code/shinyproxy&nonce=EhOFxVuVRksPOxd0hG-CKPDd2s78bhFIzSSC_PPU5-Q
obtenir l'erreur AADSTS50011 : l'URL de réponse spécifiée dans la demande ne correspond pas aux URL de réponse configurées pour l'application : 'd1abf394-b312-4717-a1c4-daaeee4f3b28'.
même erreur pour moi avec 2.4
Salut @danielfm123 , @roberts2727 donc avec ShinyProxy 2.4 la configuration suivante ne fonctionnera plus :
server:
useForwardHeaders: true
à la place, vous devez utiliser :
server:
forward-headers-strategy: native
Pouvez-vous indiquer si cela résout le problème pour vous ?
Problème résolu! Merci Monsieur.
Oui, ça marche mais tue le paquet DT
ShinyProxy 2.4 la conf suivante
Cela vaudrait-il la peine de le mentionner sur https://www.shinyproxy.io/security/?
Salut @shosaco, ceci est déjà ajouté à notre nouveau site Web : https://www.shinyproxy.io/documentation/security/#forward -headers . L'URL vers laquelle vous pointez est un reste de l'ancien site Web, que j'ai maintenant nettoyé.
Commentaire le plus utile
J'ai réussi à le réparer.
Ce code
doit être à l'extérieur
proxy: