Привет,
моя установка такая.
shinyproxy работает в докер-контейнере с именем shiny-proxy.
Обратный прокси-сервер apache httpd запускается до shinyproxy, преобразует его в https и запускается на хосте с портом 2443
keycloak также работает в контейнере докеров, но порт открыт на хосте с 8443.
настройка, application.xml
keycloak:
realm: shiny
auth-server-url: https://keycloak:8443/auth
#ssl-required: none
ssl-required: external
confidential-port: 2443
verify-token-audience: true
resource: shiny-proxy-p1
credentials-secret: xxxxxxxxxxxx
конфигурация обратного прокси apache
<VirtualHost *:2443>
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/server-cert.pem
SSLCertificateKeyFile /etc/apache2/ssl/server-cert.key
# Server Certificate Chain:
# Point SSLCertificateChainFile at a file containing the
# concatenation of PEM encoded CA certificates which form the
# certificate chain for the server certificate. Alternatively
# the referenced file can be the same as SSLCertificateFile
# when the CA certificates are directly appended to the server
# certificate for convinience.
SSLCertificateChainFile /etc/apache2/ssl/server-ca.crt
<Proxy *>
Allow from *
</Proxy>
RewriteEngine on
RewriteCond %{HTTP:Upgrade} =websocket
RewriteRule /(.*) ws://shiny-proxy:8080/$1 [P,L]
RewriteCond %{HTTP:Upgrade} !=websocket
RewriteRule /(.*) http://shiny-proxy:8080/$1 [P,L]
ProxyPass / http://shiny-proxy:8080/
ProxyPassReverse / http://shiny-proxy:8080/
ProxyRequests Off
ErrorLog ${APACHE_LOG_DIR}/proxy_error.log
CustomLog ${APACHE_LOG_DIR}/proxy_access.log combined
</VirtualHost>
Скажем, при доступе к shinyprox через apache с URL-адресом https: // lxsqlpocnd04 : 2443 /
он будет перенаправлен на страницу входа, а запрос перенаправления страницы входа на хост Keycloak lxsqlpocnd04 и порт 8443. в этом URL-адресе есть строка запроса, которая включает redirect_uri, но это не тот, который ожидается.
URL такой
https: // lxsqlpocnd04 : 8443 / auth / realms / shiny / protocol / openid-connect / auth? response_type = code & client_id = shiny-proxy-p1 & redirect_uri = http% 3A% 2F% 2Fshiny-proxy% 3A8080% 2Fsso% 2Flogin & state = e6a9-4768-8cf8-39d77500fea3 & login = true & scope = openid
И redirect_uri - это http: // shiny-proxy : 8080 / sso / login, отличный от https: // lxsqlpocnd04 : 2443 / sso / login
может кто-нибудь помочь?
Спасибо,
Робин
Вы установили это в application.yml?
server:
useForwardHeaders: true
Отсюда: https://www.shinyproxy.io/security/#https -ssl-tls
Не уверен, что такое эквивалент Apache, но в nginx, вероятно, это решает вашу проблему:
proxy_set_header Host $http_host;
@aiham Спасибо.
У меня все работает. Это из-за отсутствия useForwardHeaders: true
Я использую useForwardHeaders: true, но проблема все еще возникает
@ danielfm123
Я использую useForwardHeaders: true, но проблема все еще возникает
Есть еще одна возможность, связанная с сертификатами SSL. Если ваши сертификаты, установленные на Keycloak, не являются общедоступными (корневой и промежуточный ЦС не входят в список доверенных сертификатов по умолчанию от Java), вам необходимо добавить их в доверенный ЦС JRE по умолчанию. JRE - это тот, который запускает ваш Shinyproxy.
расположение по умолчанию - JAVA_HOME ---> JRE -> lib ---> security -> cacerts JAVA_HOME ---> JRE -> lib ---> security -> cacerts
команды для импорта, как это.
keytool -import -noprompt -alias -your-root -file /opt/jboss/your-root.crt -keystore / etc / pki / java / cacerts -storepass changeit
Я сделал это, это не работает, я попробовал shinyproxy 2.3.1 вместо 2.4.1, и он отправляет правильный redirect_uri, но работает только в некоторых браузерах, в остальном я получаю err_too_many_redirects
Доверяют ли ваши сертификаты публично? Я столкнулся с этим на этапе тестирования, сертификаты не пользуются доверием общественности. Вам необходимо импортировать корневой ЦС и промежуточный ЦС в доверенное хранилище браузера. Каждый браузер индивидуален, зависит от вашей ОС и браузера. В моем случае я использую Windows после импорта сертификатов в доверенную зону, и после этого IE и Chrome работают нормально.
Вот мое предложение,
Он проверен с помощью certbot .... Мне удалось заставить его работать с shinyproxy 2.3.1 и другой учетной записью Active Directory ...
Но есть ошибка на shinyproxy 2.4.1 и 2.4.0
Привет @ danielfm123 , я
Можете ли вы открыть новый выпуск со следующей информацией? Так я смогу разобраться и увидеть, есть ли ошибка.
У меня такая же проблема.
Установка с помощью keycloak, обратного прокси apache2 и shinyproxy 2.3.1 работает нормально. Я запускаю shinyproxy через Docker. Shinyproxy правильно перенаправляет на https://testauth.example.com.
Когда я переключаюсь на shinyproxy 2.4.1, redirect_uri содержит внутренний IP-адрес (http://192.168.51.27:8082) вместо адреса, доступного извне, и я получаю сообщение об ошибке: «Недопустимый параметр: redirect_uri».
Это соответствующая часть моего application.yml:
proxy:
title: AUTHTEST
hide-navbar: false
template-path: /templates
favicon-path: /www/favicon.png
heartbeat-rate: 10000
heartbeat-timeout: 600000
port: 8080
admin-groups: admin
container-wait-time: 30000
authentication: keycloak
keycloak:
realm: shinyr
auth-server-url: http://192.168.51.122:8080/auth
resource: shinyr
credentials-secret: <secret>
docker:
internal-networking: true
specs:
- id: test
display-name: Euler App
description: Test App
container-cmd: ["R", "-e", "shiny::runApp('/root/euler')"]
container-image: saletelligence/test
container-network: authtest_authtest_net
access-groups: [admin, pm]
logging:
file:
shinyproxy.log
server:
useForwardHeaders: true
Это конфигурация apache:
<VirtualHost *:443>
RequestHeader set X-Forwarded-Proto "https"
RequestHeader set X-Forwarded-Port "443"
ServerName testauth.example.com
RewriteEngine On
RewriteCond %{HTTP:Upgrade} =websocket
RewriteRule /(.*) ws://192.168.51.27:8082/$1 [P,L]
RewriteCond %{HTTP:Upgrade} !=websocket
RewriteRule /(.*) http://192.168.51.27:8082/$1 [P,L]
ProxyRequests Off
ProxyPass "/" "http://192.168.51.27:8082/"
ProxyPassReverse "/" "http://192.168.51.27:8082/"
SSLProxyEngine On
SSLEngine On
SSLCertificateFile /etc/apache2/sslcert/example.crt
SSLCertificateKeyFile /etc/apache2/sslcert/example_pem.key
SSLCACertificateFile /etc/apache2/sslcert/example_bundle.pem
</VirtualHost>
Привет @ eastclintw00d
Пожалуйста, попробуйте использовать:
server:
forward-headers-strategy: "native"
Вместо
server:
useForwardHeaders: true
Спасибо!
Привет @LEDfan
Это решило проблему.
Спасибо за быстрый ответ!
Это работает, но убивает пакет DT
@ danielfm123 Вы уверены, что используете shinyproxy 2.4.1? DT у меня работает нормально.
@ danielfm123 @ eastclintw00d Запросы POST (сделанные, например, DT) не работают при использовании OIDC с текущим ShinyProxy (2.4.1). Исправление от @LEDfan будет частью предстоящего выпуска, но это не тема этой темы.
Проблема с запросом POST теперь исправлена в версии 2.4.2.
Обновлена документация, относящаяся к исходному выпуску.
Я заблокирую эту проблему, чтобы мы могли ее обслуживать.
Конечно, как всегда, не стесняйтесь открывать новый выпуск, если у вас возникнут какие-либо проблемы!