Zammad: Omniauth OAuth redirect_uri_mismatch cuando se usa https

Creado en 3 feb. 2017  ·  9Comentarios  ·  Fuente: zammad/zammad

Infos:

  • Versión de Zammad utilizada: 1.2.0
  • Sistema operativo: Ubuntu 16.04

Comportamiento esperado:

  • use https en la URL de devolución de llamada para github oauth

Comportamiento real:

  • usa http en la URL de devolución de llamada para github oauth

Pasos para reproducir el comportamiento:

  • establecer el tipo http en https
  • cerrar sesión
  • autorizar con github en la página de inicio de sesión

Solución alternativa conocida

redirigir http a https en nginx y usar la versión http de la url como url de devolución de llamada en la configuración de la aplicación github oauth

(relativo al # 647)

bug

Comentario más útil

Hola @schurig , ¡creo que lo tengo! ¿Está ejecutando con una instalación de NGINX? Si es así, actualice su configuración y agregue estas dos líneas:

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

Como en la captura de pantalla:
bildschirmfoto 2017-02-17 um 16 56 54

Reinicie su NGINX y Zammad y avíseme. Apache debería tener estas líneas:

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

Para el registro: descargué el archivo rack.envs a través de un inicializador que sobrescribía la detección de SSL de Omniauth en un nuevo inicializador de rieles 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

Y no se configuró ninguna de las vars marcadas.

Todos 9 comentarios

Funcionó para mí.

Recuerde que la URL de devolución de llamada está configurada en github y no en Zammad.

Aquí:

screenshot_3

¡Gracias @ madd86 !

@ madd86 eso es lo que hice. La otra cosa es solo la solución para que funcione

Hola @schurig - ups. Presiona el botón para temprano 😁

Analicé el comportamiento y puedo reproducir el problema que tienes. Lamentablemente, está fuera del alcance de Zammad (hecho por Ominauth), por lo que no podemos proporcionar una solución directa. Sin embargo, lo analizaremos más a fondo para encontrar la mejor solución para que funcione.

Cómo reproducir:

  • Tener una instancia de https Zammad ejecutándose con un proxy inverso, por ejemplo, NGINX
  • Registre una aplicación Github OAuth2 en Github / Zammad
  • Intente iniciar sesión en Zammad, sea redirigido a la página de Github
  • Tenga en cuenta que el parámetro redirect_url GET es en realidad la url de Zammad con http en lugar de https

Estado actual:
El redirect_url viene de aquí:
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 algunos de esos RACK ENV no están configurados correctamente. Debe comprobarse si podemos influir en esto a través de la configuración de NGINX o si tenemos que hacerlo de alguna manera en el contexto de Rails.

Hola @schurig , ¡creo que lo tengo! ¿Está ejecutando con una instalación de NGINX? Si es así, actualice su configuración y agregue estas dos líneas:

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

Como en la captura de pantalla:
bildschirmfoto 2017-02-17 um 16 56 54

Reinicie su NGINX y Zammad y avíseme. Apache debería tener estas líneas:

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

Para el registro: descargué el archivo rack.envs a través de un inicializador que sobrescribía la detección de SSL de Omniauth en un nuevo inicializador de rieles 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

Y no se configuró ninguna de las vars marcadas.

¡Ese era el problema! ¡¡Gracias!! 😍 ❤️

¡Gracias por la respuesta! El compromiso está en camino. 🚀 hasta el próximo número.

Prueba esta respuesta, funcionó conmigo
https://stackoverflow.com/a/41466634/1770571

@salmagomaa esto no resuelve el problema y fue un error dentro de Zammad.
Intente no reciclar las publicaciones; el problema ya se ha resuelto.

¿Fue útil esta página
0 / 5 - 0 calificaciones