Shinyproxy: Запускать shinyproxy только на https (443)

Созданный на 21 дек. 2018  ·  25Комментарии  ·  Источник: openanalytics/shinyproxy

Здравствуй,

Пробовали настроить ShinyProxy только на https. Это кажется возможным согласно документации - https://www.shinyproxy.io/security/#https -ssl-tls

Обратите внимание, что когда доступен только https (т.е. нет перенаправления с http, настроенного в nginx), необходимо добавить следующее в application.yml, чтобы использовать заголовки переадресации:
сервер:
useForwardHeaders: true

Проблема в том, что при настройке только с использованием https, входа NGINX и OpenID схема https не передается из входа NGINX в контейнер ShinyProxy, что, в свою очередь, вызывает ряд проблем с OpenId. А именно:

  • Возвращаемый URL-адрес, который shinyproxy генерирует для OpenID на https, создается с помощью http.

Причина, по которой это происходит, связана с тем, что ShinyProxy использует здесь коды по умолчанию - spring -security DefaultOAuth2AuthorizationRequestResolver.java # L141

Самый полезный комментарий

Удалось исправить.
Этот код

 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 kids, и они тоже используют 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

К сожалению, у меня такая же проблема с shinyproxy 2.3.1.

У меня этот блок находится вне блока прокси в файле application.yml

сервер:
useForwardHeaders: true

и у меня прокси-сервер Nginx настроен точно, как описано в документации. Я также (чтобы проверить, сделал ли я какую-то глупую ошибку ngnix, настроил сервер Apache и имел ту же проблему).

Мои блоки конфигурации 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 в качестве веб-сервера, и у меня такая же проблема. Мои две текущие теории заключаются в том, что либо что-то не так с моей настройкой application.yml, либо потому, что я не понимаю прокси / обратный прокси, что-то в моем блоке прокси позволяет перенаправить на http.

@ Клэр-Келли, в чем именно твоя ошибка?

@ greenspray9 Я не получаю сообщения об ошибке! Он отлично работает, поэтому, когда я захожу на свой веб-сайт, я вижу блестящую страницу входа в систему прокси, и она обслуживается через HTTPS (это желаемое поведение). Проблема в том, что когда я вхожу в систему (пока использую простую аутентификацию), страница начинает обслуживаться через HTTP (не HTTPS - это проблема!)

@ ckelley-ct Извините, у меня нет опыта работы с нужным вам типом входа. Может происходит какое-то редирект?

У меня такая же проблема, вы нашли решение?

@ HEPBO3AH да, я сделал - для меня проблема заключалась в небезопасном изображении (строка с URL-адресом логотипа: http://www.openanalytics.eu/sites/www.openanalytics.eu/themes/oa/logo.png в пример кода выше). Если вы измените его на изображение, обслуживаемое по https, или удалите его, проблема решится.

@ HEPBO3AH @ ckelley-ct FYI, мы переместили изображение на 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=5ZEbvVrVKBGpwId02I91SNRN-oPSbqkSR9oOlj7PRRQ%3D&redirect_uri=http : //52.152.166.27/login/oauth2/code/shinyproxy&nonce=EhOFxVuVRksPOxd0hG-CKPDd2s78bhFIzSSC_PPU5-Q

получение ошибки AADSTS50011: URL-адрес ответа, указанный в запросе, не соответствует URL-адресам ответа, настроенным для приложения: 'd1abf394-b312-4717-a1c4-daaeee4f3b28'.

Это мой application.yml для shinyproxy 2.4.0, блестящий прокси 2.3.1, похоже, работает с 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

Мне удалось создать обратный прокси-сервер с 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=5ZEbvVrVKBGpwId02I91SNRN-oPSbqkSR9oOlj7PRRQ%3D&redirect_uri=http : //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

ShinyProxy 2.4 следующий conf

Стоит ли упоминать об этом на https://www.shinyproxy.io/security/?

Привет, @shosaco, это уже добавлено на наш новый сайт: https://www.shinyproxy.io/documentation/security/#forward -headers. URL-адрес, на который вы указываете, - это остаток старого веб-сайта, который я сейчас очистил.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги

Смежные вопросы

PauloJhonny picture PauloJhonny  ·  8Комментарии

algo-se picture algo-se  ·  6Комментарии

jat255 picture jat255  ·  6Комментарии

fmmattioni picture fmmattioni  ·  3Комментарии

lucius-verus-fan picture lucius-verus-fan  ·  7Комментарии