<p>shinyproxy генерирует неправильный URI перенаправления при использовании keycloak</p>

Созданный на 19 июн. 2020  ·  16Комментарии  ·  Источник: openanalytics/shinyproxy

Привет,

моя установка такая.

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

может кто-нибудь помочь?

Спасибо,

Робин

question

Все 16 Комментарий

Вы установили это в 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 работают нормально.

Вот мое предложение,

  1. на этапе тестирования, пока у вас работает один браузер, этого будет достаточно.
  2. для производственного развертывания добавьте безопасный веб-прокси перед shinyproxy и keycloak. Настройте его для использования SSL от веб-прокси и использования общедоступных доверенных сертификатов. Это более безопасная структура развертывания. Если в вашей организации нет аппаратного защищенного веб-прокси, вы можете использовать Apache HTTPD в качестве обратного веб-прокси и балансировщика нагрузки.

Он проверен с помощью certbot .... Мне удалось заставить его работать с shinyproxy 2.3.1 и другой учетной записью Active Directory ...

Но есть ошибка на shinyproxy 2.4.1 и 2.4.0

Привет @ danielfm123 , я
Можете ли вы открыть новый выпуск со следующей информацией? Так я смогу разобраться и увидеть, есть ли ошибка.

  • как вы запускаете ShinyProxy (используя jar, Docker, Kubernetes и т. д.)
  • предоставьте файл application.yaml (удалите конфиденциальные значения). См. здесь, как разместить код.

    • вы используете балансировщик нагрузки или обратный прокси? какой, как он настроен (например, передает ли он заголовки X-Forwarded) и т. д.

    • какого провайдера openid вы используете? Правильно ли настроены URL-адреса обратного вызова?

    • регистрирует ли shinyproxy какие-либо ошибки? Пожалуйста, предоставьте полную трассировку стека.

У меня такая же проблема.

Установка с помощью 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.

Обновлена ​​документация, относящаяся к исходному выпуску.

Я заблокирую эту проблему, чтобы мы могли ее обслуживать.
Конечно, как всегда, не стесняйтесь открывать новый выпуск, если у вас возникнут какие-либо проблемы!

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