Zammad: Omniauth OAuth redirect_uri_mismatch saat https digunakan

Dibuat pada 3 Feb 2017  ·  9Komentar  ·  Sumber: zammad/zammad

Informasi:

  • Versi Zammad yang digunakan: 1.2.0
  • Sistem operasi: Ubuntu 16.04

Perilaku yang diharapkan:

  • gunakan https di url panggilan balik untuk github oauth

Perilaku sebenarnya:

  • menggunakan http di url panggilan balik untuk github oauth

Langkah-langkah untuk mereproduksi perilaku:

  • setel jenis http ke https
  • keluar
  • otorisasi dengan github di halaman login

Solusi yang diketahui

alihkan http ke https di nginx dan gunakan versi http dari url sebagai url panggilan balik di pengaturan aplikasi oauth github

(terkait dengan # 647)

bug

Komentar yang paling membantu

Hai @schurig - Sepertinya saya mengerti! Apakah Anda menjalankan dengan instalasi NGINX? Jika demikian, harap perbarui konfigurasi Anda dan tambahkan dua baris berikut:

        proxy_set_header X-Forwarded-Proto https;
        proxy_set_header X-Forwarded-Port 443;

Seperti di tangkapan layar:
bildschirmfoto 2017-02-17 um 16 56 54

Mulai ulang NGINX dan Zammad Anda dan beri tahu saya. Apache harus menjadi baris ini:

RequestHeader set Host zammad.example.com
RequestHeader set X-Forwarded-Proto https
RequestHeader set X-Forwarded-Port 443

Sebagai catatan: Saya membuang rack.envs melalui penginisialisasi yang menimpa deteksi ssl Omniauth di penginisialisasi rel baru config/initializers/debug_ssl.rb :

Rails.application.config.to_prepare do              # to_prepare ensures that the monkey patching happens before the first request
  OmniAuth::Strategy.class_eval do                  # reopen the class
    protected

    def ssl?                                        # redefine the ssl? method
      # DEBUG/CUSTOMIZATION
      File.write('/tmp/omniauth.log', request.env.inspect)
      # DEBUG/CUSTOMIZATION

      request.env['HTTPS'] == 'on' ||
        request.env['HTTP_X_FORWARDED_SSL'] == 'on' ||
        request.env['HTTP_X_FORWARDED_SCHEME'] == 'https' ||
        (request.env['HTTP_X_FORWARDED_PROTO'] && request.env['HTTP_X_FORWARDED_PROTO'].split(',')[0] == 'https') ||
        request.env['rack.url_scheme'] == 'https'
    end
  end
end

Dan tidak ada var yang diperiksa dipasang.

Semua 9 komentar

Itu berhasil untuk saya.

Ingatlah bahwa url panggilan balik sebenarnya disetel di github dan bukan di Zammad.

Sini:

screenshot_3

Terima kasih @ madd86 !

@ madd86 itulah yang saya lakukan. Hal lain hanyalah solusi agar berhasil

Hai @schurig - up. Tekan tombol ke awal 😁

Saya menganalisis perilakunya dan dapat mereproduksi masalah yang Anda alami. Sayangnya itu di luar ruang lingkup Zammad (dilakukan oleh Ominauth) jadi kami tidak dapat memberikan perbaikan langsung. Namun demikian kami akan menganalisisnya lebih lanjut untuk menemukan solusi terbaik untuk membuatnya berfungsi.

Bagaimana memperbanyak:

  • Memiliki instance https Zammad yang berjalan dengan proxy terbalik, misalnya NGINX
  • Daftarkan aplikasi Github OAuth2 di Github / Zammad
  • Coba login di Zammad, diarahkan ke halaman Github
  • Perhatikan bahwa parameter GET redirect_url sebenarnya adalah url Zammad dengan http, bukan https

Kondisi saat ini:
Redirect_url berasal dari sini:
https://github.com/intridea/omniauth-github/blob/master/lib/omniauth/strategies/github.rb#L5
https://github.com/intridea/omniauth-oauth2/blob/master/lib/omniauth/strategies/oauth2.rb#L47
https://github.com/omniauth/omniauth/blob/8098855f6b52f5f1aecbd700e7068f204adddfdd/lib/omniauth/strategy.rb#L435
https://github.com/omniauth/omniauth/blob/8098855f6b52f5f1aecbd700e7068f204adddfdd/lib/omniauth/strategy.rb#L428
https://github.com/omniauth/omniauth/blob/8098855f6b52f5f1aecbd700e7068f204adddfdd/lib/omniauth/strategy.rb#L503

Sepertinya beberapa dari RACK ENV tersebut tidak diatur dengan benar. Harus dicentang jika kita dapat mempengaruhi ini melalui konfigurasi NGINX atau jika kita harus melakukannya dalam konteks Rails.

Hai @schurig - Sepertinya saya mengerti! Apakah Anda menjalankan dengan instalasi NGINX? Jika demikian, harap perbarui konfigurasi Anda dan tambahkan dua baris berikut:

        proxy_set_header X-Forwarded-Proto https;
        proxy_set_header X-Forwarded-Port 443;

Seperti di tangkapan layar:
bildschirmfoto 2017-02-17 um 16 56 54

Mulai ulang NGINX dan Zammad Anda dan beri tahu saya. Apache harus menjadi baris ini:

RequestHeader set Host zammad.example.com
RequestHeader set X-Forwarded-Proto https
RequestHeader set X-Forwarded-Port 443

Sebagai catatan: Saya membuang rack.envs melalui penginisialisasi yang menimpa deteksi ssl Omniauth di penginisialisasi rel baru config/initializers/debug_ssl.rb :

Rails.application.config.to_prepare do              # to_prepare ensures that the monkey patching happens before the first request
  OmniAuth::Strategy.class_eval do                  # reopen the class
    protected

    def ssl?                                        # redefine the ssl? method
      # DEBUG/CUSTOMIZATION
      File.write('/tmp/omniauth.log', request.env.inspect)
      # DEBUG/CUSTOMIZATION

      request.env['HTTPS'] == 'on' ||
        request.env['HTTP_X_FORWARDED_SSL'] == 'on' ||
        request.env['HTTP_X_FORWARDED_SCHEME'] == 'https' ||
        (request.env['HTTP_X_FORWARDED_PROTO'] && request.env['HTTP_X_FORWARDED_PROTO'].split(',')[0] == 'https') ||
        request.env['rack.url_scheme'] == 'https'
    end
  end
end

Dan tidak ada var yang diperiksa dipasang.

Ini masalahnya! Terima kasih!! 😍 ❤️

Terima kasih untuk umpan baliknya! Komit sedang dalam proses. 🚀 hingga edisi berikutnya.

Coba jawaban ini berhasil dengan saya
https://stackoverflow.com/a/41466634/1770571

@salmagomaa ini tidak menyelesaikan masalah dan merupakan Bug di dalam Zammad.
Harap coba untuk tidak mendaur ulang postingan - masalah telah teratasi.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat