<p>glossyproxy menghasilkan redirect uri yang salah saat menggunakan keycloak</p>

Dibuat pada 19 Jun 2020  ·  16Komentar  ·  Sumber: openanalytics/shinyproxy

Halo,

pengaturan saya seperti ini.

mengkilapproxy berjalan dalam wadah buruh pelabuhan dengan nama proxy-mengkilap.

Apache httpd reverse proxy berjalan sebelum shinyproxy dan mengubahnya menjadi https dan berjalan pada host dengan port 2443
keycloak juga berjalan dalam wadah buruh pelabuhan tetapi port terbuka di Host dengan 8443.

setup, aplikasi.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

konfigurasi proxy terbalik 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>

Katakanlah ketika mengakses shinyprox melalui Apache dengan URL https://lxsqlpocnd04 :2443/
itu akan mengarahkan ke halaman login dan halaman login mengarahkan permintaan ke Keycloak Host lxsqlpocnd04 dan port 8443. di URL itu ada string kueri yang menyertakan redirect_uri tetapi bukan yang diharapkan.

URL-nya seperti ini
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=00f5e e6a9-4768-8cf8-39d77500fea3&login=true&scope=openid

Dan redirect_uri adalah http://shiny-proxy :8080/sso/login selain https://lxsqlpocnd04 :2443/sso/login

dapatkah seseorang membantu?

Terima kasih,

Robin

question

Semua 16 komentar

Apakah Anda mengatur ini di application.yml?

server:
  useForwardHeaders: true

Dari sini: https://www.shinyproxy.io/security/#https -ssl-tls

Tidak yakin apa yang setara dengan Apache tetapi di nginx ini mungkin yang memperbaiki masalah Anda:

    proxy_set_header  Host    $http_host;

@aiham Terima kasih.

Saya memilikinya bekerja. Itu karena tidak ada useForwardHeaders: true

saya menggunakan useForwardHeaders: benar tetapi masih mengalami masalah

@danielfm123

saya menggunakan useForwardHeaders: benar tetapi masih mengalami masalah

Ada kemungkinan lain terkait dengan sertifikat SSL. Jika sertifikat Anda yang diinstal pada Keycloak tidak dipercaya publik (CA root dan perantara tidak ada dalam daftar kepercayaan default dari Java), Anda perlu menambahkannya di CA tepercaya default JRE. JRE adalah yang menjalankan Shinyproxy Anda.

lokasi defaultnya adalah JAVA_HOME---> JRE -->lib---> security--> cacerts JAVA_HOME---> JRE -->lib---> security--> cacerts

perintah untuk mengimpor seperti ini.

keytool -import -noprompt -alias -your-root -file /opt/jboss/your-root.crt -keystore /etc/pki/java/cacerts -storepass changeit

Saya melakukannya, tidak berhasil, saya mencoba shinyproxy 2.3.1 alih-alih 2.4.1 dan mengirimkan redirect_uri yang benar, tetapi hanya berfungsi di beberapa browser, sisanya saya mendapatkan err_too_many_redirects

Apakah sertifikat Anda dipercaya publik? Saya mengalami ini selama fase pengujian, sertifikat tidak dipercaya publik. Anda perlu mengimpor Root CA dan Intermediate CA ke toko tepercaya Browser. Setiap browser berbeda, tergantung pada OS dan Browser Anda. Dalam kasus saya, saya menggunakan Windows, setelah saya mengimpor Sertifikat ke zona tepercaya dan IE dan Chrome berfungsi dengan baik setelah itu.

Ini saran saya,

  1. selama fase pengujian, selama Anda memiliki satu browser yang berfungsi, itu akan cukup baik.
  2. untuk penyebaran produksi, tambahkan proxy web aman sebelum glossyproxy dan keycloak. Konfigurasikan untuk menggunakan SSL dari proxy web dan gunakan sertifikat tepercaya publik. Ini adalah struktur penyebaran aman yang lebih baik. Jika organisasi Anda tidak memiliki proxy web yang aman untuk perangkat keras, Anda dapat menggunakan Apache HTTPD sebagai proxy web terbalik dan penyeimbang beban juga.

Itu divalidasi dengan certbot.... Saya berhasil membuatnya bekerja dengan glossyproxy 2.3.1 dan akun direktori aktif yang berbeda...

Tapi ada bug di glossyproxy 2.4.1 dan 2.4.0

Hai @danielfm123 , saya memeriksa beberapa hal di sini, dan saya tidak dapat mereproduksi masalah dengan redirect_uri di ShinyProxy 2.4.0/1.
Bisakah Anda membuka edisi baru dengan informasi berikut? Dengan begitu saya bisa melihat ke dalamnya dan melihat apakah ada bug.

  • bagaimana Anda menjalankan ShinyProxy (menggunakan toples, Docker, Kubernetes dll)
  • berikan file application.yaml Anda (hapus nilai sensitif) Lihat di sini bagaimana Anda dapat memposting kode

    • apakah Anda menggunakan load-balancer atau proxy terbalik? yang mana, bagaimana konfigurasinya (misalnya melewati header X-Forwarded) dll

    • penyedia openid mana yang Anda gunakan? Apakah url panggilan balik dikonfigurasi dengan benar?

    • apakah glossyproxy mencatat kesalahan? Tolong beri jejak tumpukan penuh.

Saya memiliki masalah yang sama.

Setup dengan keycloak, apache2 reverse proxy dan glossyproxy 2.3.1 bekerja dengan baik. Saya menjalankan glossyproxy melalui Docker. Shinyproxy dialihkan dengan benar ke https://testauth.example.com.

Ketika saya beralih ke glossyproxy 2.4.1 redirect_uri berisi IP internal (http://192.168.51.27:8082) alih-alih alamat yang dapat diakses dari luar dan saya mendapatkan kesalahan: "Parameter tidak valid: redirect_uri".

Ini adalah bagian yang relevan dari application.yml saya:

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

Ini adalah konfigurasi 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>

Hai @eastclintw00d

Silakan coba gunakan:

server:
  forward-headers-strategy: "native"

Dari pada

server:
  useForwardHeaders: true

Terima kasih!

Hai @LEDfan

Itu memecahkan masalah.

Terima kasih atas respon yang cepat!

Itu berfungsi tetapi itu membunuh paket DT

@danielfm123 Apakah Anda yakin menjalankan glossyproxy 2.4.1? DT bekerja dengan baik untuk saya.

@danielfm123 @eastclintw00d Permintaan POST (seperti yang dibuat misalnya oleh DT) tidak berfungsi saat menggunakan OIDC dengan ShinyProxy saat ini (2.4.1). Perbaikan oleh @LEDfan akan menjadi bagian dari rilis mendatang, tetapi ini bukan topik utas ini.

Masalah dengan permintaan POST sekarang telah diperbaiki dalam rilis 2.4.2

Dokumentasi yang berkaitan dengan masalah asli diperbarui.

Saya akan mengunci masalah ini, sehingga masalah tetap dapat dipertahankan untuk kami.
Tentu saja, seperti biasa jangan ragu untuk membuka edisi baru jika Anda menemui masalah!

Apakah halaman ini membantu?
0 / 5 - 0 peringkat