Oi,
Tentei configurar o ShinyProxy apenas em https. Isso parece possível de acordo com a documentação - https://www.shinyproxy.io/security/#https -ssl-tls
Observe que quando apenas https está disponível (ou seja, sem redirecionamentos de http configurado no nginx), é necessário adicionar o seguinte ao application.yml para usar cabeçalhos de encaminhamento:
servidor:
useForwardHeaders: true
O problema é que, ao configurar apenas com https, entrada NGINX e OpenID, o esquema https não é transmitido da entrada NGINX para o contêiner ShinyProxy, o que por sua vez causa vários problemas com OpenId. Nomeadamente:
A razão pela qual isso acontece é devido ao ShinyProxy usar os códigos padrão aqui - spring-security DefaultOAuth2AuthorizationRequestResolver.java # L141
@garyallenkt Você conseguiu contornar esse problema?
Obrigado!
Alguma atualização para esse problema ?
O OpenAnalytics fez um ótimo trabalho ajudando a resolver isso.
Você deve conseguir obter a versão mais recente do ShinyProxy (2.3.0) e seguir a documentação atualizada aqui - https://www.shinyproxy.io/security/#https -ssl-tls
Boa sorte.
Olá @garyallenkt ,
Obrigado por sua resposta rápida. Tentei com a versão mais recente, mas o problema persiste no meu caso. Estou incorporando todo o BrightProxy ao Iframe. Para fazer o login, o servidor redireciona a conexão HTTPS para a conexão HTTP que não é permitida pela maioria dos navegadores. Você sabe como posso consertar isso?
Cumprimentos
@fmichielssen
Estou usando um fork do Telethon kids repo e eles usam 2.3.0 também, mas só para ter certeza também puxei a imagem do openanalytics. Para sua referência, aqui estão minhas configurações.
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
e 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;
}
}
}
Qualquer atualização possível sobre isso? @garyallenkt @fmichielssen
Conseguiu consertar.
Este código
server:
useForwardHeaders: true
precisa estar fora de proxy:
server
é de fato um bloco de nível superior e não está dentro de proxy
Infelizmente, estou tendo o mesmo problema com o GlossProxy 2.3.1
Eu tenho este bloco fora do bloco proxy no arquivo application.yml
servidor:
useForwardHeaders: true
e eu tenho o proxy Nginx configurado exatamente conforme descrito na documentação. Eu também (para testar se eu apenas cometi algum erro idiota do ngnix ao configurar um servidor Apache e tive exatamente o mesmo problema).
Meus blocos de configuração Nginx são:
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;
}
}
Alguém tem alguma ideia sobre o que pode estar errado? ou mesmo pensamentos sobre como consertar isso?
Qual é o erro? Você pode compartilhar seus arquivos de configuração como eu fiz? Talvez eu possa te ajudar
@greenspray, obrigado por dar uma olhada! Eu realmente estou tão perplexo com isso! Meu Nginx o configura no comentário acima, e é assim que meu application.yml se parece:
Além de alterar a porta e adicionar a linha de cabeçalho serverforward, tentei manter tudo exatamente como estava instalado. Eu até testei isso com o proxy brilhante 2.3.0, já que parecia estar funcionando para todos neste tópico, mas tinha o mesmo problema.
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
Eu também testei usando o apache como servidor da web, e estou com o mesmo problema. Minhas duas teorias atuais são que algo está errado com minha configuração de application.yml, ou porque eu não entendo proxy / proxy reverso, algo em meu bloco de proxy está permitindo o redirecionamento para http.
@ Claire-Kelley qual é o seu erro exato?
@ greenspray9 Não estou recebendo um erro! Funciona perfeitamente para que quando eu vá ao meu site eu possa ver a página de login do proxy brilhante e é servido por HTTPS (este é o comportamento desejado). O problema é que quando eu faço login (usando autenticação simples por enquanto) a página começa a ser servida por HTTP (não HTTPS - este é o problema!)
@ ckelley-ct Desculpe, não tenho experiência com o tipo de login que você deseja. Talvez haja algum tipo de redirecionamento acontecendo?
Eu tenho o mesmo problema, vocês encontraram uma solução?
@ HEPBO3AH sim, eu fiz - para mim, o problema era com a imagem insegura (a linha logo-url: http://www.openanalytics.eu/sites/www.openanalytics.eu/themes/oa/logo.png no código de exemplo acima). Se você alterar isso para uma imagem veiculada por https ou removê-la, o problema será resolvido.
@ HEPBO3AH @ ckelley-ct FYI, mudamos a imagem para https://www.openanalytics.eu/shinyproxy/logo.png
Consegui fazer o proxy reverso com nginx e logar com segurança usando autenticação simples, mas uma vez que tento usar openid ele falha porque usa http como protocolo de retorno de chamada:
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
obtendo erro AADSTS50011: O URL de resposta especificado na solicitação não corresponde aos URLs de resposta configurados para o aplicativo: 'd1abf394-b312-4717-a1c4-daaeee4f3b28'.
Este é o meu application.yml para brilhanteproxy 2.4.0, o brilhante proxy 2.3.1 parece funcionar no 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
Consegui fazer o proxy reverso com nginx e logar com segurança usando autenticação simples, mas uma vez que tento usar openid ele falha porque usa http como protocolo de retorno de chamada:
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
obtendo erro AADSTS50011: O URL de resposta especificado na solicitação não corresponde aos URLs de resposta configurados para o aplicativo: 'd1abf394-b312-4717-a1c4-daaeee4f3b28'.
mesmo erro para mim com 2.4
Olá @ danielfm123 , @ roberts2727 então com ShinyProxy 2.4 a seguinte configuração não funcionará mais:
server:
useForwardHeaders: true
em vez disso, você deve usar:
server:
forward-headers-strategy: native
Você pode relatar se isso resolve o problema para você?
Problema resolvido! Obrigado senhor.
Sim, funciona, mas mata o pacote DT
ShinyProxy 2.4 a seguinte conf
Vale a pena mencionar isso em https://www.shinyproxy.io/security/?
Olá @shosaco, isto já foi adicionado ao nosso novo site: https://www.shinyproxy.io/documentation/security/#forward -headers. O URL para o qual você está apontando é um resto do site antigo, que agora limpei.
Comentários muito úteis
Conseguiu consertar.
Este código
precisa estar fora de
proxy: