こんにちは、
私のセットアップはこんな感じです。
shinyproxyは、shiny-proxyという名前のDockerコンテナで実行されます。
apache httpdリバースプロキシはshinyproxyの前に実行され、httpsに変換され、ポート2443のホストで実行されます。
keycloakもdockerコンテナで実行されますが、ポートは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>
URL https:// lxsqlpocnd04 :2443 /を使用してApache経由でshinyproxにアクセスする場合を考えてみましょう。
ログインページにリダイレクトし、ログインページのリダイレクト要求を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 = 00f5e087- e6a9-4768-8cf8-39d77500fea3&login = true&scope = openid
また、redirect_uriはhttps:// lxsqlpocnd04 :2443 / sso / login以外のhttp:// shiny-proxy :8080 / 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を使用しているim:trueですが、まだ問題があります
@ danielfm123
useForwardHeadersを使用しているim:trueですが、まだ問題があります
SSL証明書に関連する別の可能性があります。 Keycloakにインストールされている証明書がパブリックトラステッドでない場合(ルートCAと中間CAがJavaのデフォルトの信頼リストにない場合)、JREのデフォルトのトラステッドCAに追加する必要があります。 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
私はそれをしました、それは動作しません、私は2.4.1の代わりにshinyproxy 2.3.1を試しました、そしてそれは正しいredirect_uriを送信します、しかしそれはいくつかのブラウザでのみ動作します、残りでは私はerr_too_many_redirectsを取得します
あなたの証明書は公に信頼されていますか? 私はテスト段階でこれに遭遇しました。証明書は公に信頼されていません。 ルートCAと中間CAをブラウザの信頼できるストアにインポートする必要があります。 各ブラウザは異なり、OSとブラウザによって異なります。 私の場合、信頼できるゾーンに証明書をインポートした後、Windowsを使用していますが、その後はIEとChromeの両方が正常に機能します。
これが私の提案です、
certbotで検証されています... shinyproxy2.3.1と別のActiveDirectoryアカウントで動作させることができました...
しかし、shinyproxy2.4.1と2.4.0にはバグがあります
こんにちは@ danielfm123 、ここでいくつか確認しましたが、ShinyProxy 2.4.0 / 1のredirect_uriで問題を再現できません。
次の情報で新しい問題を開くことができますか? そうすれば、私はそれを調べて、バグがあるかどうかを確認できます。
同じ問題があります。
keycloak、apache2リバースプロキシ、およびshinyproxy2.3.1を使用したセットアップは正常に機能します。 Docker経由でshinyproxyを実行します。 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現在のShinyProxy(2.4.1)でOIDCを使用している@LEDfanによる修正は今後のリリースの一部になる予定ですが、これはこのスレッドのトピックではありません。
POSTリクエストの問題は2.4.2リリースで修正されました
元の問題に関連するドキュメントが更新されます。
この問題をロックして、問題を維持できるようにします。
もちろん、何か問題が発生した場合は、いつものように新しい問題を開くことを躊躇しないでください!