Здравствуй,
Пробовали настроить ShinyProxy только на https. Это кажется возможным согласно документации - https://www.shinyproxy.io/security/#https -ssl-tls
Обратите внимание, что когда доступен только https (т.е. нет перенаправления с http, настроенного в nginx), необходимо добавить следующее в application.yml, чтобы использовать заголовки переадресации:
сервер:
useForwardHeaders: true
Проблема в том, что при настройке только с использованием https, входа NGINX и OpenID схема https не передается из входа NGINX в контейнер ShinyProxy, что, в свою очередь, вызывает ряд проблем с OpenId. А именно:
Причина, по которой это происходит, связана с тем, что ShinyProxy использует здесь коды по умолчанию - spring -security DefaultOAuth2AuthorizationRequestResolver.java # L141
@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-адрес, на который вы указываете, - это остаток старого веб-сайта, который я сейчас очистил.
Самый полезный комментарий
Удалось исправить.
Этот код
должен находиться за пределами
proxy: