Zammad: Omniauth OAuth redirect_uri_mismatch при использовании https

Созданный на 3 февр. 2017  ·  9Комментарии  ·  Источник: zammad/zammad

Информация:

  • Используемая версия Zammad: 1.2.0
  • Операционная система: Ubuntu 16.04

Ожидаемое поведение:

  • использовать https в URL-адресе обратного вызова для github oauth

Фактическое поведение:

  • использует http в URL-адресе обратного вызова для github oauth

Шаги по воспроизведению поведения:

  • установите тип http на https
  • выйти
  • авторизуйтесь с помощью github на странице входа

Известный обходной путь

перенаправить http на https в nginx и использовать http-версию URL-адреса в качестве URL-адреса обратного вызова в настройке приложения github oauth

(относится к # 647)

Самый полезный комментарий

Привет @schurig - думаю, я понял! Вы используете установку NGINX? Если да, обновите свою конфигурацию и добавьте эти две строки:

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

Как на скриншоте:
bildschirmfoto 2017-02-17 um 16 56 54

Перезагрузите NGINX и Zammad и дайте мне знать. В Apache должны быть такие строки:

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

Для записи: я сбросил rack.envs через инициализатор, перезаписав обнаружение SSL Omniauth в новом инициализаторе 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

И ни один из проверенных варов не был установлен.

Все 9 Комментарий

У меня это сработало.

Помните, что URL-адрес обратного вызова фактически установлен на github, а не на Zammad.

Здесь:

screenshot_3

Спасибо @ madd86 !

@ madd86 вот что я сделал. Другое дело - обходной путь, чтобы он работал

Привет @schurig -

Я проанализировал поведение и могу воспроизвести возникшую у вас проблему. К сожалению, это выходит за рамки Zammad (сделано Ominauth), поэтому мы не можем предоставить прямое исправление. Тем не менее, мы проанализируем его дальше, чтобы найти лучшее решение, чтобы заставить его работать.

Как воспроизвести:

  • Иметь экземпляр https Zammad, работающий с обратным прокси-сервером, например NGINX.
  • Зарегистрируйте приложение Github OAuth2 в Github / Zammad
  • Попробуйте авторизоваться в Zammad, перенаправитесь на страницу Github
  • Обратите внимание, что параметр GET redirect_url на самом деле является URL-адресом Zammad с http вместо https.

Текущее состояние:
Redirect_url происходит отсюда:
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

Кажется, некоторые из этих RACK ENV не установлены должным образом. Следует проверить, можем ли мы повлиять на это через конфигурацию NGINX или нам нужно сделать это как-то в контексте Rails.

Привет @schurig - думаю, я понял! Вы используете установку NGINX? Если да, обновите свою конфигурацию и добавьте эти две строки:

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

Как на скриншоте:
bildschirmfoto 2017-02-17 um 16 56 54

Перезагрузите NGINX и Zammad и дайте мне знать. В Apache должны быть такие строки:

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

Для записи: я сбросил rack.envs через инициализатор, перезаписав обнаружение SSL Omniauth в новом инициализаторе 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

И ни один из проверенных варов не был установлен.

Это была проблема! Спасибо!! 😍 ❤️

Спасибо за ответ! Фиксация уже в пути. 🚀 до следующего выпуска.

Попробуйте этот ответ, это сработало со мной
https://stackoverflow.com/a/41466634/1770571

@salmagomaa это не решает проблему и являлось ошибкой в ​​Zammad.
Постарайтесь не перерабатывать сообщения - проблема уже решена.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги