Zammad: Omniauth OAuth redirect_uri_mismatch lorsque https est utilisé

Créé le 3 févr. 2017  ·  9Commentaires  ·  Source: zammad/zammad

Infos:

  • Version Zammad utilisée: 1.2.0
  • Système d'exploitation: Ubuntu 16.04

Comportement prévisible:

  • utiliser https dans l'URL de rappel pour github oauth

Comportement réel:

  • utilise http dans l'URL de rappel pour github oauth

Étapes pour reproduire le comportement:

  • définir le type http sur https
  • Se déconnecter
  • autoriser avec github sur la page de connexion

Solution de contournement connue

rediriger http vers https dans nginx et utiliser la version http de l'url comme URL de rappel dans le paramètre de l'application github oauth

(lié à # 647)

bug

Commentaire le plus utile

Salut @schurig - Je pense que je l'ai compris! Utilisez-vous une installation NGINX? Si tel est le cas, veuillez mettre à jour votre configuration et ajouter ces deux lignes:

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

Comme dans la capture d'écran:
bildschirmfoto 2017-02-17 um 16 56 54

Redémarrez votre NGINX et Zammad et faites-le moi savoir. Apache devrait être ces lignes:

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

Pour mémoire: j'ai vidé le rack.envs via un initialiseur écrasant la détection Omniauth ssl dans un nouvel initialiseur de rails 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

Et aucun des vars vérifiés n'a été défini.

Tous les 9 commentaires

Cela a fonctionné pour moi.

N'oubliez pas que l'URL de rappel est en fait définie sur github et non sur Zammad.

Ici:

screenshot_3

Merci @ madd86 !

@ madd86 c'est ce que j'ai fait. L'autre chose est juste la solution de contournement pour que cela fonctionne

Salut @schurig - ups. Appuyez sur le bouton au début 😁

J'ai analysé le comportement et je peux reproduire le problème que vous rencontrez. Malheureusement, il est hors de la portée de Zammad (fait par Ominauth), nous ne pouvons donc pas fournir de solution directe. Néanmoins, nous l'analyserons plus avant pour trouver la meilleure solution pour le faire fonctionner.

Comment reproduire:

  • Avoir une instance https Zammad en cours d'exécution avec un proxy inverse, par exemple NGINX
  • Enregistrer une application Github OAuth2 dans Github / Zammad
  • Essayez de vous connecter à Zammad, soyez redirigé vers la page Github
  • Notez que le paramètre redirect_url GET est en fait l'url Zammad avec http au lieu de https

État actuel:
Le redirect_url vient d'ici:
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

Il semble que certains de ces RACK ENV ne soient pas définis correctement. Doit être vérifié si nous pouvons influencer cela via la configuration NGINX ou si nous devons le faire d'une manière ou d'une autre dans le contexte Rails.

Salut @schurig - Je pense que je l'ai compris! Utilisez-vous une installation NGINX? Si tel est le cas, veuillez mettre à jour votre configuration et ajouter ces deux lignes:

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

Comme dans la capture d'écran:
bildschirmfoto 2017-02-17 um 16 56 54

Redémarrez votre NGINX et Zammad et faites-le moi savoir. Apache devrait être ces lignes:

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

Pour mémoire: j'ai vidé le rack.envs via un initialiseur écrasant la détection Omniauth ssl dans un nouvel initialiseur de rails 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

Et aucun des vars vérifiés n'a été défini.

C'était le problème! Merci!! 😍 ❤️

Merci pour les commentaires! Commit est en route. 🚀 jusqu'au prochain numéro.

Essayez cette réponse, cela a fonctionné avec moi
https://stackoverflow.com/a/41466634/1770571

@salmagomaa cela ne résout pas le problème et était un bug dans Zammad.
Veuillez essayer de ne pas recycler les messages - le problème a déjà été résolu.

Cette page vous a été utile?
0 / 5 - 0 notes