Zammad: Omniauth OAuth redirect_uri_mismatch bei Verwendung von https

Erstellt am 3. Feb. 2017  ·  9Kommentare  ·  Quelle: zammad/zammad

Infos:

  • Verwendete Zammad-Version: 1.2.0
  • Betriebssystem: Ubuntu 16.04

Erwartetes Verhalten:

  • Verwenden Sie https in der Rückruf-URL für github oauth

Tatsächliches Verhalten:

  • verwendet http in der Rückruf-URL für github oauth

Schritte zum Reproduzieren des Verhaltens:

  • Setzen Sie den http-Typ auf https
  • Ausloggen
  • Autorisiere mit Github auf der Anmeldeseite

Bekannte Problemumgehung

Leiten Sie http in https in Nginx um und verwenden Sie die http-Version der URL als Rückruf-URL in der Github Oauth-App-Einstellung

(im Zusammenhang mit # 647)

bug

Hilfreichster Kommentar

Hallo @schurig - ich glaube ich habe es verstanden! Laufen Sie mit einer NGINX-Installation? Wenn ja, aktualisieren Sie bitte Ihre Konfiguration und fügen Sie diese beiden Zeilen hinzu:

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

Wie im Screenshot:
bildschirmfoto 2017-02-17 um 16 56 54

Starten Sie NGINX und Zammad neu und lassen Sie es mich wissen. Apache sollte diese Zeilen sein:

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

Für die Aufzeichnung: Ich habe dieack.envs über einen Initialisierer ausgegeben, der die Omniauth-SSL-Erkennung in einem neuen Rails-Initialisierer überschreibt. 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

Und keine der überprüften Vars wurde gesetzt.

Alle 9 Kommentare

Es hat bei mir funktioniert.

Denken Sie daran, dass die Rückruf-URL tatsächlich auf Github und nicht auf Zammad eingestellt ist.

Hier:

screenshot_3

Danke @ madd86 !

@ madd86 das habe ich getan. Die andere Sache ist nur die Problemumgehung, damit es funktioniert

Hallo @schurig - ups. Drücken Sie die Taste zu früh 😁

Ich habe das Verhalten analysiert und kann das Problem reproduzieren, das Sie haben. Leider liegt es außerhalb des Bereichs von Zammad (von Ominauth erstellt), sodass wir keine direkte Lösung anbieten können. Trotzdem werden wir es weiter analysieren, um die beste Lösung zu finden, damit es funktioniert.

So reproduzieren Sie:

  • Lassen Sie eine https Zammad-Instanz mit einem Reverse-Proxy ausführen, z. B. NGINX
  • Registrieren Sie eine Github OAuth2-Anwendung in Github / Zammad
  • Versuchen Sie, sich in Zammad anzumelden, und werden Sie zur Github-Seite weitergeleitet
  • Beachten Sie, dass der Parameter redirect_url GET tatsächlich die Zammad-URL mit http anstelle von https ist

Aktuellen Zustand:
Die redirect_url kommt von hier:
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

Es scheint, dass einige dieser RACK ENVs nicht richtig eingestellt sind. Sollte überprüft werden, ob wir dies über das NGINX-Conf beeinflussen können oder ob wir es irgendwie im Rails-Kontext tun müssen.

Hallo @schurig - ich glaube ich habe es verstanden! Laufen Sie mit einer NGINX-Installation? Wenn ja, aktualisieren Sie bitte Ihre Konfiguration und fügen Sie diese beiden Zeilen hinzu:

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

Wie im Screenshot:
bildschirmfoto 2017-02-17 um 16 56 54

Starten Sie NGINX und Zammad neu und lassen Sie es mich wissen. Apache sollte diese Zeilen sein:

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

Für die Aufzeichnung: Ich habe dieack.envs über einen Initialisierer ausgegeben, der die Omniauth-SSL-Erkennung in einem neuen Rails-Initialisierer überschreibt. 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

Und keine der überprüften Vars wurde gesetzt.

Das war das Problem! Vielen Dank!! 😍 ❤️

Danke für die Rückmeldung! Commit ist auf dem Weg. 🚀 bis zur nächsten Ausgabe.

Versuchen Sie diese Antwort, es hat bei mir funktioniert
https://stackoverflow.com/a/41466634/1770571

@salmagomaa dies löst das Problem nicht und war ein Fehler in Zammad.
Bitte versuchen Sie nicht, Beiträge zu recyceln - das Problem wurde bereits behoben.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen