Shinyproxy: Jalankan glossyproxy hanya di https (443)

Dibuat pada 21 Des 2018  ·  25Komentar  ·  Sumber: openanalytics/shinyproxy

Hai,

Telah mencoba mengatur ShinyProxy di https saja. Ini tampaknya mungkin sesuai dengan dokumentasi - https://www.shinyproxy.io/security/#https -ssl-tls

Perhatikan bahwa ketika hanya https yang tersedia (yaitu tidak ada pengalihan dari http yang dikonfigurasi di nginx), diperlukan untuk menambahkan yang berikut ke application.yml untuk menggunakan header penerusan:
server:
gunakanForwardHeaders: benar

Masalahnya adalah ketika mengatur dengan https saja, NGINX ingress dan OpenID, skema https tidak diteruskan dari NGINX ingress ke wadah ShinyProxy yang pada gilirannya menyebabkan sejumlah masalah dengan OpenId. Yaitu:

  • URL Pengembalian yang dihasilkan oleh shinyproxy untuk OpenID di https dibuat dengan http

Alasan ini terjadi adalah karena ShinyProxy menggunakan kode default di sini - spring-security DefaultOAuth2AuthorizationRequestResolver.java # L141

bug

Komentar yang paling membantu

Berhasil memperbaikinya.
Kode ini

 server:
      useForwardHeaders: true

harus di luar proxy:

Semua 25 komentar

@garyallenkt Apakah Anda dapat mengatasi masalah ini?
Terima kasih!

Setiap pembaruan tentang masalah ini?

OpenAnalytics melakukan pekerjaan yang baik dalam membantu menyelesaikan ini.

Anda seharusnya bisa mendapatkan ShinyProxy versi terbaru (2.3.0) dan mengikuti dokumentasi yang diperbarui di sini - https://www.shinyproxy.io/security/#https -ssl-tls

Semoga berhasil.

Hai @garyallenkt ,

Terima kasih atas respon cepat Anda. Saya mencoba dengan versi terbaru tetapi masalah tetap ada dalam kasus saya. Saya menyematkan seluruh proxy mengkilap di Iframe. Untuk masuk, server mengalihkan koneksi HTTPS ke koneksi HTTP yang tidak diizinkan oleh sebagian besar browser. Apakah Anda tahu bagaimana saya bisa memperbaikinya?

Salam

@fmichielssen

Saya menggunakan garpu dari repo anak Telethon dan mereka juga menggunakan 2.3.0, tetapi hanya untuk memastikan saya juga menarik gambar openanalytics. Untuk referensi Anda, berikut adalah konfigurasi saya.

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

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

Adakah kemungkinan pembaruan tentang ini? @garyallenkt @fmichielssen

Berhasil memperbaikinya.
Kode ini

 server:
      useForwardHeaders: true

harus di luar proxy:

server memang blok tingkat atas dan bukan di dalam proxy

Sayangnya saya mengalami masalah yang sama dengan glossyproxy 2.3.1

Saya memiliki blok ini di luar blok proxy di file application.yml

server:
gunakanForwardHeaders: benar

dan saya telah mengatur proxy Nginx dengan tepat seperti yang dijelaskan dalam dokumentasi. Saya juga (untuk menguji apakah saya baru saja membuat kesalahan ngnix bodoh mengatur server Apache dan memiliki masalah yang sama persis).

Blok konfigurasi Nginx saya adalah:

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

}

Apakah ada yang punya ide tentang apa yang mungkin salah? atau bahkan pemikiran tentang cara memperbaikinya?

Apa kesalahannya? Bisakah Anda membagikan file konfigurasi Anda seperti yang saya lakukan? Mungkin saya bisa membantu Anda

@greenspray terima kasih telah melihat! Saya benar-benar sangat bingung dengan ini! Nginx saya mengonfigurasinya di komentar di atas, dan inilah tampilan application.yml saya:

Selain mengubah port dan menambahkan baris header serverforward, saya telah mencoba untuk menjaga semuanya persis seperti yang diinstal. Saya bahkan menguji ini dengan proxy mengkilap 2.3.0 karena itu tampaknya berfungsi untuk semua orang di utas ini, tetapi itu memiliki masalah yang sama.

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

Saya juga menguji menggunakan Apache sebagai server web, dan saya memiliki masalah yang sama. Dua teori saya saat ini adalah bahwa ada sesuatu yang salah dengan pengaturan application.yml saya, atau itu karena saya tidak mengerti proxy/proxy terbalik sehingga ada sesuatu di blok proxy saya yang memungkinkan pengalihan ke http.

@Claire-Kelley apa kesalahan sebenarnya Anda?

@ greenspray9 saya tidak mendapatkan kesalahan! Ini berfungsi dengan baik sehingga ketika saya pergi ke situs web saya, saya dapat melihat halaman login proxy yang mengkilap dan disajikan melalui HTTPS (ini adalah perilaku yang diinginkan). Masalahnya adalah ketika saya masuk (menggunakan otentikasi sederhana untuk saat ini) halaman mulai disajikan melalui HTTP (bukan HTTPS- ini masalahnya!)

@ckelley-ct Maaf saya tidak punya pengalaman dengan jenis login yang Anda inginkan. Mungkin ada semacam pengalihan yang terjadi?

Saya memiliki masalah yang sama, apakah Anda menemukan solusi?

@HEPBO3AH ya saya lakukan - bagi saya masalahnya adalah dengan gambar yang tidak aman (logo-url baris: http://www.openanalytics.eu/sites/www.openanalytics.eu/themes/oa/logo.png di contoh kode di atas). Jika Anda mengubahnya menjadi gambar yang disajikan melalui https atau menghapusnya, maka masalahnya akan teratasi.

@HEPBO3AH @ckelley-ct FYI, kami telah memindahkan gambar ke https://www.openanalytics.eu/shinyproxy/logo.png

Saya berhasil membuat proxy terbalik dengan nginx dan login dengan aman menggunakan otentikasi sederhana, tetapi begitu saya mencoba menggunakan openid gagal karena menggunakan http sebagai protokol panggilan balik:

: Okl3 //52.152.166.27/login/oauth2/code/shinyproxy&nonce=EhOFxVuVRksPOxd0hG-CKPDd2s78bhFIzSSC_PPU5-Q

mendapatkan kesalahan AADSTS50011: URL balasan yang ditentukan dalam permintaan tidak cocok dengan URL balasan yang dikonfigurasi untuk aplikasi: 'd1abf394-b312-4717-a1c4-daaeee4f3b28'.

Ini adalah application.yml saya untuk mengkilapproxy 2.4.0, proxy yang mengkilap 2.3.1 tampaknya berfungsi dari 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

Saya berhasil membuat proxy terbalik dengan nginx dan login dengan aman menggunakan otentikasi sederhana, tetapi begitu saya mencoba menggunakan openid gagal karena menggunakan http sebagai protokol panggilan balik:

: Okl3 //52.152.166.27/login/oauth2/code/shinyproxy&nonce=EhOFxVuVRksPOxd0hG-CKPDd2s78bhFIzSSC_PPU5-Q

mendapatkan kesalahan AADSTS50011: URL balasan yang ditentukan dalam permintaan tidak cocok dengan URL balasan yang dikonfigurasi untuk aplikasi: 'd1abf394-b312-4717-a1c4-daaeee4f3b28'.

kesalahan yang sama untuk saya dengan 2.4

Hai @danielfm123 , @roberts2727 jadi dengan ShinyProxy 2.4 konfigurasi berikut tidak akan berfungsi lagi:

server:
    useForwardHeaders: true

sebagai gantinya Anda harus menggunakan:

server:
  forward-headers-strategy: native

Bisakah Anda melaporkan kembali apakah ini menyelesaikan masalah untuk Anda?

Masalah terselesaikan! Terima kasih Pak.

Ya, itu berfungsi tetapi membunuh paket DT

ShinyProxy 2.4 konfigurasi berikut

Apakah layak disebutkan di https://www.shinyproxy.io/security/?

Hai @shosaco ini sudah ditambahkan ke situs web baru kami: https://www.shinyproxy.io/documentation/security/#forward -headers . URL yang Anda tunjuk adalah sisa dari situs web lama, yang sekarang saya bersihkan.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

donarus picture donarus  ·  3Komentar

benkates picture benkates  ·  3Komentar

jat255 picture jat255  ·  3Komentar

fmmattioni picture fmmattioni  ·  3Komentar

thomas-chauvet picture thomas-chauvet  ·  5Komentar