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.
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.
@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.
/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.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.Entonces...
/auth/sso
sigue siendo válida en las últimas versiones?Notas:
<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>
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:
samaccountname
-> login
)zammad
)zammad
/etc/krb5.conf
)kinit
sessions_controller.rb
(como 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:
REMOTE_USER
HTTP_REMOTE_USER
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
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 ramadevelop
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?