<p>keycloakを使用すると、shinyproxyが間違ったリダイレクトURIを生成します</p>

作成日 2020年06月19日  ·  16コメント  ·  ソース: openanalytics/shinyproxy

こんにちは、

私のセットアップはこんな感じです。

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です

誰かが助けることができますか?

ありがとう、

ロビン

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を使用している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の両方が正常に機能します。

これが私の提案です、

  1. テスト段階では、1つのブラウザが機能している限り、それで十分です。
  2. 実稼働環境では、shinyproxyとkeycloakの前に安全なWebプロキシを追加します。 WebプロキシからのSSLを使用し、公開されている信頼できる証明書を使用するように構成します。 これは、より安全な展開構造です。 組織にハードウェアで保護されたWebプロキシがない場合は、ApacheHTTPDをリバースWebプロキシおよびロードバランサーとして使用することもできます。

certbotで検証されています... shinyproxy2.3.​​1と別のActiveDirectoryアカウントで動作させることができました...

しかし、shinyproxy2.4.1と2.4.0にはバグがあります

こんにちは@ danielfm123 、ここでいくつか確認しましたが、ShinyProxy 2.4.0 / 1のredirect_uriで問題を再現できません。
次の情報で新しい問題を開くことができますか? そうすれば、私はそれを調べて、バグがあるかどうかを確認できます。

  • ShinyProxyをどのように実行していますか(jar、Docker、Kubernetesなどを使用)
  • application.yamlファイルを提供します(機密値を削除します)コードを投稿する方法については、

    • ロードバランサーまたはリバースプロキシを使用していますか? どれ、どのように構成されているか(たとえば、X-Forwardedヘッダーを渡すか)など

    • どのopenidプロバイダーを使用していますか? コールバックURLは正しく構成されていますか?

    • shinyproxyはエラーをログに記録しますか? 完全なスタックトレースを提供してください。

同じ問題があります。

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リリースで修正されました

元の問題に関連するドキュメントが更新されます。

この問題をロックして、問題を維持できるようにします。
もちろん、何か問題が発生した場合は、いつものように新しい問題を開くことを躊躇しないでください!

このページは役に立ちましたか?
0 / 5 - 0 評価

関連する問題

xtrasimplicity picture xtrasimplicity  ·  5コメント

chienyuchuan picture chienyuchuan  ·  8コメント

jat255 picture jat255  ·  6コメント

fmmattioni picture fmmattioni  ·  3コメント

erossini picture erossini  ·  3コメント