Zammad: Omniauth OAuth redirect_uri_mismatch quando https é usado

Criado em 3 fev. 2017  ·  9Comentários  ·  Fonte: zammad/zammad

Infos:

  • Versão Zammad usada: 1.2.0
  • Sistema operacional: Ubuntu 16.04

Comportamento esperado:

  • use https no url de retorno de chamada para github oauth

Comportamento real:

  • usa http no url de retorno de chamada para github oauth

Passos para reproduzir o comportamento:

  • defina o tipo de http para https
  • sair
  • autorizar com github na página de login

Solução alternativa conhecida

redirecionar http para https no nginx e usar a versão http do url como url de retorno de chamada na configuração do aplicativo github oauth

(relacionado a # 647)

bug

Comentários muito úteis

Olá @schurig - acho que entendi! Você está executando uma instalação NGINX? Em caso afirmativo, atualize sua configuração e adicione estas duas linhas:

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

Como na imagem:
bildschirmfoto 2017-02-17 um 16 56 54

Reinicie seu NGINX e Zammad e me avise. Apache deve ser estas linhas:

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

Para registro: eu descartei o rack.envs por meio de um inicializador sobrescrevendo a detecção de ssl do Omniauth em um novo inicializador 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

E nenhum dos vars verificados foi definido.

Todos 9 comentários

Funcionou para mim

Lembre-se de que o url de retorno de chamada está definido no github e não no Zammad.

Aqui:

screenshot_3

Obrigado @ madd86 !

@ madd86 foi o que eu fiz. A outra coisa é apenas a solução alternativa para que funcione

Olá, @schurig - ups. Aperte o botão bem cedo 😁

Analisei o comportamento e posso reproduzir o problema que você está tendo. Infelizmente, está fora do escopo Zammad (feito por Ominauth), então não podemos fornecer uma correção direta. No entanto, iremos analisá-lo mais detalhadamente para encontrar a melhor solução para fazê-lo funcionar.

Como reproduzir:

  • Ter uma instância https Zammad em execução com um proxy reverso, por exemplo, NGINX
  • Registre um aplicativo Github OAuth2 no Github / Zammad
  • Tente fazer o login no Zammad, seja redirecionado para a página do Github
  • Observe que o parâmetro redirect_url GET é na verdade o url Zammad com http em vez de https

Estado atual:
O redirect_url vem daqui:
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

Parece que alguns desses RACK ENVs não estão configurados corretamente. Deve ser verificado se podemos influenciar isso através da configuração do NGINX ou se temos que fazer de alguma forma no contexto Rails.

Olá @schurig - acho que entendi! Você está executando uma instalação NGINX? Em caso afirmativo, atualize sua configuração e adicione estas duas linhas:

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

Como na imagem:
bildschirmfoto 2017-02-17 um 16 56 54

Reinicie seu NGINX e Zammad e me avise. Apache deve ser estas linhas:

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

Para registro: eu descartei o rack.envs por meio de um inicializador sobrescrevendo a detecção de ssl do Omniauth em um novo inicializador 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

E nenhum dos vars verificados foi definido.

Esse era o problema! Obrigado!! 😍 ❤️

Obrigado pelo feedback! O compromisso está a caminho. 🚀 até a próxima edição.

Tente esta resposta funcionou comigo
https://stackoverflow.com/a/41466634/1770571

@salmagomaa isso não resolve o problema e era um bug no Zammad.
Tente não reciclar as postagens - o problema já foi resolvido.

Esta página foi útil?
0 / 5 - 0 avaliações