Shinyproxy: https(443)でのみshinyproxyを実行する

作成日 2018年12月21日  ·  25コメント  ·  ソース: openanalytics/shinyproxy

やあ、

httpsでのみShinyProxyを設定しようとしました。 これは、ドキュメントに従って可能であるようです-https //www.shinyproxy.io/security/#https -ssl-tls

httpsのみが使用可能な場合(つまり、nginxで構成されたhttpからのリダイレクトがない場合)、フォワードヘッダーを使用するには、application.ymlに以下を追加する必要があることに注意してください。
サーバ:
useForwardHeaders:true

問題は、httpsのみ、NGINX入力、およびOpenIDを使用してセットアップする場合、httpsスキームがNGINX入力からShinyProxyコンテナーに渡されないため、OpenIdで多くの問題が発生することです。 すなわち:

  • shinyproxyがhttps上のOpenIDに対して生成するリターンURLは、httpで生成されます。

これが発生する理由は、ShinyProxyがここでデフォルトコードを使用しているためです-spring-security DefaultOAuth2AuthorizationRequestResolver.java#L141

bug

最も参考になるコメント

なんとか修正できました。
このコード

 server:
      useForwardHeaders: true

proxy:外にある必要があります

全てのコメント25件

@garyallenktこの問題を回避できましたか?
ありがとう!

この問題に関する更新はありますか?

OpenAnalyticsは、これを解決するのに素晴らしい仕事をしました。

最新バージョンのShinyProxy(2.3.0)を入手し、ここで更新されたドキュメントに従うことができるはずです-https //www.shinyproxy.io/security/#https -ssl-tls

幸運を祈ります。

こんにちは@garyallenkt

迅速な対応ありがとうございます。 最新バージョンで試しましたが、私の場合は問題が解決しません。 shinyproxy全体をIframeに埋め込んでいます。 ログインするために、サーバーはHTTPS接続をほとんどのブラウザーで許可されていないHTTP接続にリダイレクトします。 私がこれを修正する方法を知っていますか?

よろしく

@fmichielssen

Telethonキッズレポのフォークを使用していて、2.3.0も使用していますが、念のため、openanalyticsのイメージも取得しました。 参考までに、ここに私の設定があります。

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

および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;
    }
  }
}

これに関する可能な更新はありますか? @garyallenkt @fmichielssen

なんとか修正できました。
このコード

 server:
      useForwardHeaders: true

proxy:外にある必要があります

serverは確かにトップレベルのブロックであり、 proxy内部で

残念ながら、shinyproxy2.3.​​1でも同じ問題が発生しています。

application.ymlファイルのプロキシブロックの外にこのブロックがあります

サーバ:
useForwardHeaders:true

ドキュメントに記載されているように、Nginxプロキシをexacltyに設定しています。 私も(Apacheサーバーのセットアップでばかげたngnixエラーが発生し、まったく同じ問題が発生したかどうかをテストするため)。

私のNginx構成ブロックは次のとおりです。

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

}

何が悪いのかについて誰かが何か考えを持っていますか? またはそれを修正する方法についての考えさえ?

エラーは何ですか? 私のように設定ファイルを共有できますか? 多分私はあなたを助けることができます

@greensprayご覧いただきありがとうございます! 私は本当にこれにとても困惑しています! 私のNginxは上記のコメントでそれを構成します、そしてこれは私のapplication.ymlがどのように見えるかです:

ポートを変更してserverforwardヘッダー行を追加する以外は、インストールされたとおりにすべてを維持しようとしました。 光沢のあるプロキシ2.3.0を使用してこれをテストしたこともあります。これは、このスレッドのすべてのユーザーにとって機能しているように見えたためですが、同じ問題がありました。

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

代わりにApacheをWebサーバーとして使用してテストしましたが、同じ問題が発生します。 私の現在の2つの理論は、application.ymlの設定に問題があるか、プロキシ/リバースプロキシを理解していないため、プロキシブロック内の何かがhttpへのリダイレクトを許可しているというものです。

@クレア-ケリーあなたの正確なエラーは何ですか?

@ greenspray9エラーが発生していません! これは完全に機能するため、自分のWebサイトにアクセスすると、光沢のあるプロキシログインページが表示され、HTTPS経由で提供されます(これは望ましい動作です)。 問題は、(今のところ単純な認証を使用して)ログインすると、ページがHTTP経由で提供され始めることです(HTTPSではありません-これが問題です!)

@ ckelley-ct申し訳ありませんがあなたが望むログインの種類についての経験がありません。 たぶん、ある種のリダイレクトが起こっているのでしょうか?

私は同じ問題を抱えています、あなたは解決策を見つけましたか?

@ HEPBO3AHはい、私はそうしました-私にとって問題は安全でない画像にありました(行logo-url:http:

@ HEPBO3AH @ ckelley-ct参考までに、画像をhttps://www.openanalytics.eu/shinyproxy/logo.pngに移動しました

nginxでリバースプロキシを作成し、単純な認証を使用して安全にログインすることができましたが、openidを使用しようとすると、コールバックプロトコルとしてhttpを使用するため、失敗します。

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

エラーAADSTS50011を取得しています:リクエストで指定された応答URLが、アプリケーション用に構成された応答URLと一致しません: 'd1abf394-b312-4717-a1c4-daaeee4f3b28'。

これは、shinyproxy 2.4.0用の私のapplication.ymlです。shinyproxy2.3.​​1は、MicrosoftEdgeから機能しているようです。

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

nginxでリバースプロキシを作成し、単純な認証を使用して安全にログインすることができましたが、openidを使用しようとすると、コールバックプロトコルとしてhttpを使用するため、失敗します。

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

エラーAADSTS50011を取得しています:リクエストで指定された応答URLが、アプリケーション用に構成された応答URLと一致しません: 'd1abf394-b312-4717-a1c4-daaeee4f3b28'。

2.4で私にとって同じエラー

こんにちは@ danielfm123@ roberts2727なので、ShinyProxy 2.4では、次の設定は機能しなくなります。

server:
    useForwardHeaders: true

代わりに、以下を使用する必要があります。

server:
  forward-headers-strategy: native

これで問題が解決するかどうかを報告できますか?

問題は解決された! ありがとうございます。

はい、動作しますが、パッケージDTを強制終了します

ShinyProxy2.4次の設定

https://www.shinyproxy.io/security/でそれについて言及する価値があり

こんにちは@shosacoこれはすでに私たちの新しいウェブサイトに追加されています: https//www.shinyproxy.io/documentation/security/#forward-headers 。 あなたが指しているURLは、私が今クリーンアップした古いWebサイトの残りです。

このページは役に立ちましたか?
0 / 5 - 0 評価