Zammad: Inicio de sesión único

Creado en 20 jun. 2017  ·  30Comentarios  ·  Fuente: zammad/zammad

Infos:

  • Versión de Zammad usada: última
  • Fuente de instalación de Zammad utilizada: rpm
  • Sistema operativo: CentOS 7
  • Navegador + versión: Firefox más reciente

Esta es una pregunta sobre el inicio de sesión único. Estamos utilizando Microsoft Active Directory en nuestra empresa y el inicio de sesión funciona bien con ldap-sync.
Me pregunto si SSO sería posible. Ya intenté configurarlo usando nginx, pero simplemente no funcionará :-(

¿Existe una forma fácil de hacerlo? ¿Quizás alguno de ustedes ya configuró Zammad con SSO? Sería bueno si alguien tuviera una instrucción o algunos ejemplos de cómo implementarlo.

Gracias de antemano.

authentication documentation feature backlog prioritised by payment verified

Comentario más útil

¡El inicio de sesión único finalmente aterrizó en develop gracias a @rlue ! Será parte de la próxima versión 3.2 en unas pocas semanas. Tenga en cuenta que la actualización de las instancias de Zammad que utilizan la rama develop está actualmente rota. Estamos trabajando en eso. Sin embargo, puede probar SSO en un nuevo sistema Zammad (prueba).

@MrGeneration , ¿puede ampliar la documentación para cubrir la configuración de SSO en su próximo intervalo de tiempo libre?

Todos 30 comentarios

Hola @ jaeger13 ,

Por supuesto, esto es posible. Pero tienes que usar Apache httpd con mod_auth_kerb, con una configuración como esta:

<LocationMatch "/auth/sso">
  SSLRequireSSL
  AuthType Kerberos
  AuthName "Your Zammad"
  KrbMethodNegotiate On
  KrbMethodK5Passwd On
  KrbAuthRealms YOUR.REALM
  KrbLocalUserMapping on
  KrbServiceName HTTP/[email protected]
  Krb5KeyTab /etc/httpd/zammad.keytab
  require valid-user
</LocationMatch>

Dependiendo del atributo uid elegido (ist sAMAccountName en el ejemplo anterior) funcionará de inmediato.

Y debe configurar Apache como proxy inverso en lugar de nginx.

Siempre que el módulo de autenticación devuelva el nombre de usuario autenticado en la variable de entorno REMOTE_USER o HTTP_REMOTE_USER, es posible utilizar otros módulos como auth_mellon, etc.

hth, Roy

Hola @rkaldung ,

Gracias por tu pronta respuesta. Lo intentaré con Apache y tus instrucciones :-)
Aunque desearía que hubiera una forma de hacerlo con nginx :-(

¡Gracias!

Hola @ jaeger13 ,

Hay una forma con nginx, pero sin probar por el momento. @martini ¿ Tus dos centavos en esto?

Hola @rkaldung

¿Puede describir el camino con NGINX? Eso también me interesaría mucho. Gracias.

Hola @ scimitar4444

@rkaldung significa una implementación a nivel de rieles como https://github.com/jgraichen/omniauth-kerberos , pero esto debe implementarse en Zammad primero. 🤖

-Martín

@martini Siempre es solo un compromiso de distancia 😜

He intentado que el SSO funcione siguiendo tus instrucciones. Sin embargo, navegar por http: //myserver.mydom.local/auth/sso me lleva de vuelta a la página de inicio de sesión. . . Me estoy perdiendo de algo ?

Intentar usar (Stanford) Webauth (y el usuario ldap) da como resultado el mismo error, después de iniciar sesión correctamente en SSO, aparece el mensaje zammad para iniciar sesión.
Usando: Ubuntu 16.04; Zammad 2.2.0; Apache, MariaDB; (REMOTE_USER lo establece webauth)

@rkaldung , ¿sabes algo? ¿nuevo?

Encontré una solución:

Problema: el módulo necesario en lib / sso / env.rb se llama sin el request.env necesario de PUMA, por lo que 'REMOTE_USER' no está disponible.

Solución alterna:
Agregue 'REMOTE_USER' de request.env a ENV en 'zammad / app / controllers / session_controller.rb' dentro de la función 'create_sso'

   # export required environment variables for sso
   ENV['REMOTE_USER'] = request.env['REMOTE_USER']
   ENV['HTTP_REMOTE_USER'] = request.env['HTTP_REMOTE_USER']

@martini, ¿ podría ser esto un problema con una versión más nueva de PUMA?

EDITAR: debe agregar una regla correspondiente para configurar el campo de encabezado en httpd.conf para que funcione:

RequestHeader merge REMOTE_USER %{REMOTE_USER}s

Editar 2018-01-08:
Todo funciona ahora con la solución alternativa de pikachuprof. Fue un error tipográfico en la configuración /etc/krb5.conf.

Infos:
Versión de Zammad usada: última
Fuente de instalación de Zammad utilizada: rpm
Sistema operativo: CentOS 7
Navegador + versión: Firefox más reciente

Apache Server Config:
<VirtualHost *:443>
    ServerName ***
    ServerAdmin ***

    DocumentRoot "/opt/zammad/public"

    <IfModule !mod_auth_kerb.c>
        LoadModule auth_kerb_module /usr/lib64/httpd/modules/mod_auth_kerb.so
    </IfModule>

    ProxyRequests Off
    ProxyPreserveHost On

    <Proxy localhost:3000>
        Require local
    </Proxy>

    ProxyPass /assets !
    ProxyPass /favicon.ico !
    ProxyPass /robots.txt !
    ProxyPass /ws ws://localhost:6042/
    ProxyPass / http://localhost:3000/

    <Directory />
        Options FollowSymLinks
        AllowOverride None
    </Directory>

    <Directory "/opt/zammad/public">
        Options FollowSymLinks
        Require all granted
    </Directory>

    <Location "/auth/sso">
        Order allow,deny
        Allow from all

        AuthType Kerberos
        AuthName "Ticketsystem Kerberos Login"
        KrbServiceName HTTP
        KrbMethodNegotiate on
        KrbMethodK5Passwd on
        KrbLocalUserMapping off
        KrbSaveCredentials on

        Require valid-user

        # Environment specific: Path to the keytab and the realm
        Krb5Keytab /etc/kerberos.keytab
        KrbAuthRealm ***
    </Location>

    SSLEngine on
    SSLCertificateFile /etc/pki/tls/certs/***
    SSLCertificateKeyFile /etc/pki/tls/private/***

    ErrorLog "logs/***-error_log"
    CustomLog "logs/***-access_log" common
</VirtualHost>

Cuando abro https: // / auth / sso y "KrbLocalUserMapping on", mi navegador muestra el siguiente error:error de servidor internoEl servidor encontró un error interno o una mala configuración y no pudo completar su solicitud.Comuníquese con el administrador del servidor en admin @ para informarle la hora en que ocurrió este error y las acciones que realizó justo antes de este error.
Puede haber más información disponible sobre este error en el registro de errores del servidor.

Si configuro "KrbLocalUserMapping off", mi navegador se redirige a https: // * / # login

Intento establecer "RequestHeader fusionar REMOTE_USER% {REMOTE_USER} s" pero nada cambia.

¡Espero que alguien pueda ayudar!

Hemos agregado otra pequeña solución:

RewriteEngine   On
RewriteCond     %{HTTP_COOKIE} !^.*zammad_session.*$
RewriteRule     ^/$ https://%{SERVER_NAME}/auth/sso [R,L]

Estas líneas en Apache-config redireccionan '/' a '/ auth / sso' solo mientras no se establezca ninguna cookie zammad. Esto permite la redirección a la página de inicio de sesión SSO sin crear un bucle sin fin que resulte en un "Error interno del servidor".

Parece que no puedo hacer que funcione. . . Los registros de apache muestran mi nombre de usuario para / auth / sso, luego mi solicitud se redirige a / y mi nombre de usuario desaparece. . . tal vez cometí un error al editar la función create_sso. Alguien me puede dar una pista ?

@pikachuprof Había trabajado en una implementación usando omniauth-kerberos .

Sin embargo, mi implementación requiere que inicies sesión cada vez que desees acceder a Zammad (usando tus credenciales de Kerberos, por supuesto) en lugar de usar el "ticket kerberos" que ya está generado por la máquina del usuario. (por ejemplo, desde kinit o cualquier otro "cliente de emisión de tickets de kerberos")

Espero que esto esté bien para el inicio de sesión básico usando kerberos para evitar situaciones de piratería. 😊

Aunque creo que para configuraciones avanzadas con 'inicio de sesión / autenticación de una sola vez' (por ejemplo, usando kinit una vez y autenticarse) y luego ssh / inicie sesión en zammad / sitios web internos / ftp todos los servidores sin autenticarse más ( SPNEGO / GSSAPI) solo se puede hacer configurando completamente el servidor web frontend (como Apache) que está haciendo en este momento.

screen shot 2018-02-27 at 8 37 57 pm
screen shot 2018-02-27 at 8 48 00 pm

@muhammadn usamos un servicio de inicio de sesión único basado en Kerberos llamado Stanford Webauth (mod_auth_webauth). Permite iniciar sesión mediante contraseña (en el navegador) (y establece una cookie que contiene un token Kerberos para SSO) pero no transfiere contraseñas de usuario al servicio, solo a nuestro 'WebKDC'.

La autenticación debe ser realizada por Apache en esta configuración, por supuesto, pero Zammad debería usar la variable REMOTE_USER para permitir que cualquiera de esos mecanismos "webserver-auth" funcione (¿o algo similar?), Así como proporcionar un método para romper fuera del "bucle de inicio de sesión" sin depender de la comprobación de una cookie, lo que parece un poco poco fiable.

@pikachuprof He empujado mi implementación en https://github.com/muhammadn/zammad/commit/7e8e01bff8226f2d74e80cbc307416db9bf2ac1d

Esa implementación no es oficialmente una característica de zammad, sino solo para que la pruebes usando la biblioteca omniauth-kerberos. No necesitará configurar apache con soporte kerberos ya que todo lo manejará Zammad (es una implementación a nivel de rieles) y no necesitará REMOTE_USER en el encabezado o incluso mod_auth_webauth.

Todo lo que necesita es tener su krb5.conf configurado correctamente.

ejemplo:

[logging]
    default = FILE:/var/log/krb5.log

[libdefaults]
    default_realm = ZAMMAD.COM
    kdc_timesync = 1
    ccache_type = 4
    forwardable = true
    proxiable = true

[realms]
    ZAMMAD.COM = {
        kdc = kdc.zammad.com
        admin_server = kdc.zammad.com
        default_domain = zammad.com
    }

[domain_realm]
    .zammad.com = ZAMMAD.COM
    zammad.com = ZAMMAD.COM

Puede publicar cualquier problema al respecto en https://github.com/muhammadn/zammad/issues en su lugar, ya que no es una implementación oficial.

Sin embargo, tenga en cuenta que para iniciar sesión con zammad debe tener el reino en mayúsculas: por ejemplo: [email protected]

¿Alguna posibilidad de que podamos usar los tickets kerberos existentes para la autenticación? Nuestros usuarios están acostumbrados a una solución tan cómoda y no tengo la oportunidad de cambiar a zammad hasta que el SSO funcione de verdad.

El mismo problema para mí. Logré hacer una conexión SSO desde el lado de Apache (que llena REMOTE_USER ) con 2 métodos (certificado de cliente SSL Kerberos y X509). Y mis cuentas de usuario están bien pobladas, con el complemento LDAP de Zammad.

  • Como @EDVLeer, cuando llego a /auth/sso , veo el inicio de sesión del usuario en el registro de Apache (por lo que funciona), pero vuelvo a la pantalla de inicio de sesión.
  • Probé el truco de escribir en zammad/app/controllers/sessions_controller.rb ( @pikachuprof hack), pero como @EDVLeer , o lo puse en un lugar incorrecto, o el código cambió después y debemos poner esto en otro lugar ahora.
  • Probé el truco de
  • Ahora se me acabaron las ideas: D

Entonces...

  • ¿Debo activar un complemento o algo en Zammad para que funcione?
  • ¿Es un error en el código? (Quizás sí, si tenemos que cambiar el código fuente)
  • ¿La URL /auth/sso sigue siendo válida en las últimas versiones?
  • ¿O hay un documento oficial sobre cómo implementar SSO con Zammad?

Notas:

Configuración para Kerberos

<Location "/auth/sso">
    Options FollowSymLinks
    AuthType        Kerberos
    AuthName        "My Name"
    KrbMethodNegotiate  On
    # 'Off' to force users having a valid kerberos ticket, and not prompting for a login/pass
    KrbMethodK5Passwd   Off
    KrbAuthRealms       MY-DOMAIN.FR
    Krb5KeyTab      /etc/krb5.keytab
    KrbLocalUserMapping On
    KrbServiceName      HTTP
    Require valid-user
</Location>

Configuración para certificado SSL X509

Nota: debe agregar su certificado público CA (.crt) en su archivo Apache 'Paquete CA' ( SSLCACertificateFile ) para que Apache pueda verificar si los certificados de los clientes están bien

# Let this before <Location> to get the certificate at the first connect, and avoid SSL renegotiation
# when we now the real url
SSLVerifyClient     require
<Location "/auth/sso">
    Options FollowSymLinks
    SSLRequireSSL
    SSLVerifyDepth      1    # Depend of your config. Can be higher
    Require expr %{SSL_CLIENT_I_DN_CN} in {'MY CA NAME'}
    SSLOptions      +StdEnvVars
    # Get the 'firstname.lastname' part of the corporate email, and populate REMOTE_USER
    RewriteEngine       On
    RewriteCond     %{SSL:SSL_CLIENT_S_DN_Email} ^(.+)@.+$
    RewriteRule     .* - [E=REMOTE_USER:%1]
    RequestHeader set REMOTE_USER %{REMOTE_USER}e
</Location>

Podría "resolver" el problema de SSO, creo que definitivamente no es la manera perfecta, pero funciona.

Mi entorno es la última versión de zammad (2.5) con Apache2 2.4 con Postgres. Después de la configuración de SSO con mod_auth_kerb tengo que hacer las siguientes cosas.

Configuré LDAP para sincronizar a nuestros empleados. Asigné SAMACOUNTNAME al nombre de inicio de sesión. Por ejemplo, mi nombre de usuario de Windows es schman. Para poder iniciar sesión con este nombre de usuario (no con el correo electrónico).

Después de eso, he editado session_controller.rb y agrego la siguiente línea (en la línea 173)

ENV['HTTP_REMOTE_USER']=request.env['HTTP_REMOTE_USER']

para que Zammad conozca HTTP_REMOTE_USER. Después de eso, el inicio de sesión no funciona. Porque el valor de HTTP_REMOTE_USER ahora es [email protected]. Para solucionarlo, agrego la siguiente línea a mi configuración de vHost.

RequestHeader edit REMOTE_USER "@DOMAIN.AT" ""

Después de reiniciar (Apache2 y Zammad) pude iniciar sesión con SSO con http://zammad.domain.at/auth/sso

Si alguien habla alemán, escribo un pequeño post en mi blog .

@schmanat, ¿cómo resolvió el "bucle de inicio de sesión" o permitió que el usuario usara la URL "/ auth / sso"?

Por ahora, los usuarios obtienen la URL / auth / sso.

Pero esto es lo siguiente en lo que me gustaría profundizar. ¿No funcionó la solución alternativa de su respuesta algunos comentarios anteriores (RewriteRule)?

Sí, lo hizo, pero es bastante poco confiable.

Gracias a todos por su trabajo en esto y por documentar lo que han hecho. Desafortunadamente, estoy perdido. Como otros han experimentado, a mí también se me redirige a la página de inicio de sesión después de presionar el punto final "auth / sso". Aquí está todo lo que he hecho:

  • instaló Zammad en Debian 9 (stretch)
  • integración ldap configurada (asignada samaccountname -> login )
  • confirmado capaz de iniciar sesión con el nombre de usuario / contraseña de AD
  • cuenta de servicio creada en AD (simplemente llamada zammad )
  • tabla de claves creada asignada a la cuenta de servicio zammad
  • cliente / reino kerberos configurado (en /etc/krb5.conf )
  • entorno kerberos verificado con kinit
  • verificado que keytab está funcionando (capaz de obtener TGT de KDC)
  • configurado Apache2 vhost (como lo explica cohausz)
  • modificado sessions_controller.rb (como explica pikachuprof)
  • se agregó una regla de encabezado a la configuración de vhost (como lo explica pikachuprof)

También probé las soluciones ofrecidas por schmant pero nada parece ayudar.

A continuación se muestran mis registros de Apache2. Como puede ver, el usuario está pasando por ... ¿Cómo puedo verificar que las variables de entorno REMOTE_USER / HTTP_REMOTE_USER se estén configurando correctamente? ¿Hay otros pasos de solución de problemas que pueda probar?

zammad.example.com:443 10.1.4.197 - - [09/Aug/2018:09:39:23 -0500] "GET /auth/sso HTTP/1.1" 401 855 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36"
zammad.example.com:443 10.1.4.197 - [email protected] [09/Aug/2018:09:39:23 -0500] "GET /auth/sso HTTP/1.1" 302 969 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36"
zammad.example.com:443 10.1.4.197 - - [09/Aug/2018:09:39:23 -0500] "GET / HTTP/1.1" 200 1757 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36"
zammad.example.com:443 10.1.4.197 - - [09/Aug/2018:09:39:23 -0500] "POST /api/v1/signshow HTTP/1.1" 200 15874 "https://zammad.example.com/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36"
zammad.example.com:443 10.1.4.197 - - [09/Aug/2018:09:39:24 -0500] "GET /api/v1/translations/lang/en-us?_=1533825563736 HTTP/1.1" 200 720 "https://zammad.example.com/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36"
zammad.example.com:443 10.1.4.197 - - [09/Aug/2018:09:39:24 -0500] "GET /assets/images/fed16b83d2e87ea36cea961d6d8a2101.png HTTP/1.1" 304 210 "https://zammad.example.com/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36" 

Hola,

Tengo el mismo error que @ jeremyj563.

¿Existe alguna solución para iniciar sesión con SSO?

Gracias por responder

También estoy interesado en SSO.

Sería una opción implementar Azure AD para SSO.

También estamos muy interesados. Actualmente estoy probando la aplicación en el Centro de aplicaciones de prueba de Univention y estoy muy emocionado.

Perdón por molestarte: no funcionará en univention, ya que el docker compose usa nginx.

ATENCIÓN : Tenemos que advertirle que utilice la implementación de SSO de cualquier forma descrita en este u otros problemas. Los cambios proporcionados aquí contienen una vulnerabilidad de seguridad grave. Esta vulnerabilidad persistirá en las sesiones creadas a través de SSO para usuarios no autenticados. Esto significa que es posible que los usuarios no autenticados se hagan cargo de la sesión SSO creada previamente para un usuario (en el contexto de Zammad).

Recomendamos encarecidamente deshabilitar el SSO hasta que se resuelva este problema.

Sin embargo, la buena noticia es que comenzamos a trabajar en la implementación oficial de SSO.

¡El inicio de sesión único finalmente aterrizó en develop gracias a @rlue ! Será parte de la próxima versión 3.2 en unas pocas semanas. Tenga en cuenta que la actualización de las instancias de Zammad que utilizan la rama develop está actualmente rota. Estamos trabajando en eso. Sin embargo, puede probar SSO en un nuevo sistema Zammad (prueba).

@MrGeneration , ¿puede ampliar la documentación para cubrir la configuración de SSO en su próximo intervalo de tiempo libre?

Hubo un seguimiento. Tenga en cuenta el compromiso anterior.

Desafortunadamente, nos enfrentamos a algunos obstáculos para crear la documentación 😞 Se agradecería mucho una contribución en forma de Pull Request a https://github.com/zammad/zammad-admin-documentation .
El punto final de la API es /auth/sso . Esperamos que esté presente uno de los siguientes y que contenga el atributo login de un usuario:

  • ENV REMOTE_USER
  • ENV HTTP_REMOTE_USER
  • Encabezado X-Forwarded-User

Avísame si tienes alguna pregunta. Estoy feliz de contestarles.

Cerrando ahora.

Para completar: la documentación de SSO se encuentra actualmente en proceso de control de calidad.
https://github.com/zammad/zammad-documentation/pull/147

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