Shinyproxy: Führen Sie Shinyproxy nur auf https (443) aus

Erstellt am 21. Dez. 2018  ·  25Kommentare  ·  Quelle: openanalytics/shinyproxy

Hallo,

Habe versucht ShinyProxy nur auf https einzurichten. Dies scheint gemäß der Dokumentation möglich zu sein - https://www.shinyproxy.io/security/#https -ssl-tls

Beachten Sie, dass, wenn nur https verfügbar ist (dh keine Weiterleitungen von http in nginx konfiguriert sind), Folgendes zur application.yml hinzugefügt werden muss, um Forward-Header zu verwenden:
Server:
useForwardHeaders: true

Das Problem ist, dass bei der Einrichtung nur mit https, NGINX Ingress und OpenID das https-Schema nicht vom NGINX Ingress an den ShinyProxy-Container durchgereicht wird, was wiederum eine Reihe von Problemen mit OpenId verursacht. Nämlich:

  • Die Rückgabe-URL, die Shinyproxy für OpenID auf https generiert, wird mit http generated generiert

Der Grund dafür ist, dass ShinyProxy die Standardcodes hier verwendet - spring-security DefaultOAuth2AuthorizationRequestResolver.java # L141

bug

Hilfreichster Kommentar

Habe es geschafft, es zu beheben.
Dieser Code

 server:
      useForwardHeaders: true

muss draußen sein proxy:

Alle 25 Kommentare

@garyallenkt Konnten Sie dieses Problem
Vielen Dank!

Irgendwelche Updates zu diesem Thema?

OpenAnalytics hat bei der Lösung dieses Problems großartige Arbeit geleistet.

Sie sollten in der Lage sein, die neueste Version von ShinyProxy (2.3.0) zu erhalten und der aktualisierten Dokumentation hier zu folgen - https://www.shinyproxy.io/security/#https -ssl-tls

Viel Glück.

Hallo @garyallenkt ,

Vielen Dank für Ihre schnelle Antwort. Ich habe es mit der neuesten Version versucht, aber das Problem besteht in meinem Fall weiterhin. Ich bette den gesamten Shinyproxy in Iframe ein. Um sich anzumelden, leitet der Server die HTTPS-Verbindung auf eine HTTP-Verbindung um, die von den meisten Browsern nicht zugelassen wird. Wisst ihr wie ich das beheben kann?

Grüße

@fmichielssen

Ich verwende einen Fork aus dem Telethon Kids Repo und sie verwenden auch 2.3.0, aber nur um sicher zu gehen, habe ich auch das Image von openanalytics gezogen. Als Referenz sind hier meine Konfigurationen.

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

und 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;
    }
  }
}

Irgendein mögliches Update dazu? @garyallenkt @fmichielssen

Habe es geschafft, es zu beheben.
Dieser Code

 server:
      useForwardHeaders: true

muss draußen sein proxy:

server ist tatsächlich ein Block der obersten Ebene und nicht innerhalb von proxy

Leider habe ich das gleiche Problem mit Shinyproxy 2.3.1

Ich habe diesen Block außerhalb des Proxy-Blocks in der Datei application.yml

Server:
useForwardHeaders: true

und ich habe den Nginx-Proxy genau wie in der Dokumentation beschrieben eingerichtet. Ich auch (um zu testen, ob ich gerade einen dummen ngnix-Fehler gemacht habe, habe einen Apache-Server eingerichtet und genau das gleiche Problem gehabt).

Meine Nginx-Konfigurationsblöcke sind:

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;
     }

}

Hat jemand eine Idee, woran es liegen könnte? oder sogar Gedanken darüber, wie man es beheben kann?

Was ist der Fehler? Können Sie Ihre Konfigurationsdateien so teilen, wie ich es getan habe? Vielleicht kann ich Dir helfen

@greenspray danke fürs

Abgesehen vom Ändern des Ports und dem Hinzufügen der serverforward-Headerzeile habe ich versucht, alles genau so zu belassen, wie es installiert wurde. Ich habe dies sogar mit Shiny Proxy 2.3.0 getestet, da dies für alle in diesem Thread zu funktionieren schien, aber das hatte das gleiche Problem.

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

Ich habe stattdessen auch Apache als Webserver getestet und habe das gleiche Problem. Meine beiden aktuellen Theorien sind, dass entweder etwas mit meiner application.yml-Einrichtung nicht stimmt, oder dass etwas in meinem Proxy-Block die Umleitung auf http zulässt, weil ich den Proxy / Reverse-Proxy nicht verstehe.

@Claire-Kelley was ist dein genauer Fehler?

@greenspray9 Ich

@ckelley-ct Leider habe ich keine Erfahrung mit der gewünschten Anmeldeart. Vielleicht gibt es eine Art Umleitung?

Ich habe das gleiche Problem, hast du eine Lösung gefunden?

@HEPBO3AH ja habe ich - für mich war das Problem mit dem unsicheren Bild (die Zeile logo-url: http://www.openanalytics.eu/sites/www.openanalytics.eu/themes/oa/logo.png in the Beispielcode oben). Wenn Sie dies in ein über https bereitgestelltes Bild ändern oder es entfernen, wird das Problem behoben.

@HEPBO3AH @ckelley-ct FYI, wir haben das Bild nach https://www.openanalytics.eu/shinyproxy/logo.png verschoben

Ich habe es geschafft, den Reverse-Proxy mit nginx zu erstellen und mich mit einfacher Authentifizierung sicher anzumelden, aber sobald ich versuche, openid zu verwenden, schlägt es fehl, weil es http als Rückrufprotokoll verwendet:

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=5jD7PR% //52.152.166.27/login/oauth2/code/shinyproxy&nonce=EhOFxVuVRksPOxd0hG-CKPDd2s78bhFIzSSC_PPU5-Q

Fehler AADSTS50011 erhalten: Die in der Anfrage angegebene Antwort-URL stimmt nicht mit den für die Anwendung konfigurierten Antwort-URLs überein: 'd1abf394-b312-4717-a1c4-daaeee4f3b28'.

Dies ist meine application.yml für Shinyproxy 2.4.0, Shiny Proxy 2.3.1 scheint von Microsoft Edge zu funktionieren

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

Ich habe es geschafft, den Reverse-Proxy mit nginx zu erstellen und mich mit einfacher Authentifizierung sicher anzumelden, aber sobald ich versuche, openid zu verwenden, schlägt es fehl, weil es http als Rückrufprotokoll verwendet:

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=5jD7PR% //52.152.166.27/login/oauth2/code/shinyproxy&nonce=EhOFxVuVRksPOxd0hG-CKPDd2s78bhFIzSSC_PPU5-Q

Fehler AADSTS50011 erhalten: Die in der Anfrage angegebene Antwort-URL stimmt nicht mit den für die Anwendung konfigurierten Antwort-URLs überein: 'd1abf394-b312-4717-a1c4-daaeee4f3b28'.

gleicher Fehler bei mir mit 2,4

Hallo @danilfm123 , @roberts2727 also mit ShinyProxy 2.4 wird die folgende Konfiguration nicht mehr funktionieren:

server:
    useForwardHeaders: true

stattdessen müssen Sie verwenden:

server:
  forward-headers-strategy: native

Können Sie berichten, ob dies das Problem für Sie löst?

Problem gelöst! Danke mein Herr.

Ja, es funktioniert, tötet aber das Paket DT

ShinyProxy 2.4 die folgende Konf

Wäre es erwähnenswert, dass auf https://www.shinyproxy.io/security/?

Hallo @shosaco das ist bereits zu unserer neuen Website hinzugefügt: https://www.shinyproxy.io/documentation/security/#forward -headers . Die URL, auf die Sie verweisen, ist ein Überbleibsel der alten Website, die ich jetzt aufgeräumt habe.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen