Esta é uma pergunta sobre o Single Sign On. Estamos usando um Microsoft Active Directory em nossa empresa e o login funciona bem com ldap-sync.
Estou me perguntando se o SSO seria possível. Já tentei configurá-lo usando o nginx, mas simplesmente não funcionou :-(
Existe uma maneira fácil de fazer isso? Talvez um de vocês já tenha configurado o Zammad com SSO? Seria bom se alguém tivesse uma instrução ou alguns exemplos de como implementá-la.
Agradeço antecipadamente.
Olá @ jaeger13 ,
Claro que isso é possível. Mas você tem que usar Apache httpd com mod_auth_kerb, com uma configuração 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>
Dependendo do atributo uid escolhido (ist sAMAccountName no exemplo acima), ele funcionará imediatamente.
E você tem que configurar o Apache como o proxy reverso em vez de nginx.
Contanto que o módulo auth retorne o nome de usuário autenticado na variável de ambiente REMOTE_USER ou HTTP_REMOTE_USER, é possível usar outros módulos como auth_mellon etc.
hth, Roy
Ei @rkaldung ,
obrigado pela sua resposta rápida. Vou tentar com o Apache e suas instruções :-)
Embora eu desejasse que houvesse uma maneira de fazer isso com o nginx :-(
Obrigado!
Olá @ jaeger13 ,
Existe uma maneira com o nginx, mas sem testes no momento. @martini Seus dois centavos nisso?
Oi @rkaldung
Você pode descrever a maneira como o NGINX? Isso também me interessaria muito. Obrigado.
Olá @ scimitar4444
@rkaldung significa uma implementação no nível de trilhos como https://github.com/jgraichen/omniauth-kerberos - mas isso precisa ser implementado no Zammad primeiro. 🤖
-Martin
@martini É sempre só um commit 😜
Tenho tentado fazer o SSO funcionar usando suas instruções. No entanto, navegar em http: //myserver.mydom.local/auth/sso está me levando de volta à página de login. . . estou esquecendo de algo ?
Tentar usar o (Stanford) Webauth (e o usuário ldap) resulta no mesmo erro, após o login bem-sucedido no SSO, recebo o prompt zammad para fazer o login.
Usando: Ubuntu 16.04; Zammad 2.2.0; Apache, MariaDB; (REMOTE_USER é definido por webauth)
@rkaldung você sabe sth. novo?
Encontrou uma solução alternativa:
Problema: o módulo necessário em lib / sso / env.rb é chamado sem o request.env necessário do PUMA, portanto, 'REMOTE_USER' não está disponível.
Gambiarra:
Adicione 'REMOTE_USER' de request.env para ENV em 'zammad / app / controllers / sessions_controller.rb' dentro da função '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 pode ser um problema com uma versão mais recente do PUMA?
EDITAR: Você deve adicionar uma regra correspondente para definir o campo de cabeçalho em httpd.conf para fazê-lo funcionar:
RequestHeader merge REMOTE_USER %{REMOTE_USER}s
Editar 08-01-2018:
Tudo funciona agora com a solução alternativa do pikachuprof. Foi um erro de digitação no Config /etc/krb5.conf.
Infos:
Versão Zammad usada: mais recente
Fonte de instalação Zammad usada: rpm
Sistema operacional: CentOS 7
Navegador + versão: Firefox mais recente
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>
Quando abro https: // / auth / sso e "KrbLocalUserMapping on", meu navegador mostra o seguinte erro:Erro do Servidor InternoO servidor encontrou um erro interno ou configuração incorreta e não foi capaz de concluir sua solicitação.Entre em contato com o administrador do servidor em admin @ para informá-los sobre a hora em que esse erro ocorreu e as ações que você executou antes desse erro.
Mais informações sobre esse erro podem estar disponíveis no log de erros do servidor.
Se eu definir "KrbLocalUserMapping off", meu navegador é redirecionado para https: // * / # login
Tento definir "RequestHeader merge REMOTE_USER% {REMOTE_USER} s" mas nada muda.
Espero que alguém possa ajudar!
Adicionamos outra pequena solução alternativa:
RewriteEngine On
RewriteCond %{HTTP_COOKIE} !^.*zammad_session.*$
RewriteRule ^/$ https://%{SERVER_NAME}/auth/sso [R,L]
Essas linhas no Apache-config redirecionam '/' para '/ auth / sso' apenas enquanto nenhum cookie zammad estiver definido. Isso permite o redirecionamento para a página de login do SSO sem criar um loop infinito, resultando em 'Erro interno do servidor'.
Não consigo fazer funcionar. . . Os logs do apache mostram meu nome de usuário para / auth / sso, então minha solicitação é redirecionada para / e meu nome de usuário desaparece. . . talvez eu tenha cometido um erro ao editar a função create_sso !? Alguém pode me dar uma dica ?
@pikachuprof Eu trabalhei em uma implementação usando omniauth-kerberos .
No entanto, minha implementação requer que você faça o login toda vez que desejar acessar o Zammad (usando suas credenciais Kerberos, é claro) em vez de usar o "tíquete kerberos" que já é gerado pela máquina do usuário. (por exemplo, de kinit
ou qualquer outro "cliente de ingressos Kerberos")
Espero que isso seja adequado para login básico usando Kerberos para evitar situações de hacky. 😊
Embora eu ache que para configurações avançadas com 'login / autenticação única' (por exemplo, usando kinit
uma vez e autentique) e então você ssh / login para zammad / sites internos / ftp todos os servidores sem autenticar mais ( SPNEGO / GSSAPI) só pode ser feito configurando totalmente o servidor web frontend (como o Apache) que você está fazendo agora.
@muhammadn , usamos um serviço de logon único baseado em Kerberos chamado Stanford Webauth (mod_auth_webauth). Ele permite o login via senha (no navegador) (e define um cookie contendo um Kerberos-Token para SSO), mas não transfere senhas de usuário para o serviço - apenas para o nosso 'WebKDC'.
A autenticação deve ser feita pelo Apache nesta configuração, é claro - mas Zammad deve usar a variável REMOTE_USER para permitir que qualquer um desses mecanismos "webserver-auth" funcione (ou sth. Semelhante?), Bem como fornecer um método para quebrar fora do "loop de login" sem depender da verificação de um cookie, o que parece um pouco não confiável.
@pikachuprof Eu empurrei minha implementação em https://github.com/muhammadn/zammad/commit/7e8e01bff8226f2d74e80cbc307416db9bf2ac1d
Essa implementação não é oficialmente um recurso zammad, mas apenas para você experimentar usando a biblioteca omniauth-kerberos. Você não precisará configurar o apache com suporte a Kerberos, pois tudo será controlado por Zammad (é uma implementação em nível de trilhos) e não precisará de REMOTE_USER no cabeçalho ou mesmo de mod_auth_webauth.
Tudo que você precisa é ter seu krb5.conf configurado corretamente.
exemplo:
[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
Você pode postar quaisquer questões sobre isso em https://github.com/muhammadn/zammad/issues, uma vez que não é uma implementação oficial.
No entanto, observe que para fazer o login com zammad você precisa ter o reino em maiúsculas: por exemplo: [email protected]
Alguma chance de podermos usar tíquetes Kerberos existentes para autenticação? Nossos usuários estão acostumados a uma solução confortável e não tenho chance de mudar para o zammad até que o SSO funcione de verdade.
O mesmo problema para mim. Consegui fazer uma conexão SSO do lado do Apache (que preenche REMOTE_USER
) com 2 métodos (Kerberos e certificado de cliente SSL X509). E minhas contas de usuários são bem preenchidas, com o plugin Zammad LDAP.
/auth/sso
vejo o login do usuário no log do apache (então funciona), mas volto na tela de login novamente.zammad/app/controllers/sessions_controller.rb
( @pikachuprof hack), mas como @EDVLeer , ou coloquei em um lugar errado, ou o código mudou posteriormente e devemos colocá-lo em outro lugar agora.Assim...
/auth/sso
ainda é válido nos últimos lançamentos?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: você deve anexar seu certificado público CA (.crt) em seu arquivo Apache 'CA Bundle' ( SSLCACertificateFile
) para que o Apache possa verificar se os certificados dos clientes estão OK
# 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>
Eu poderia "resolver" o problema do SSO, acho que definitivamente não é a maneira perfeita, mas funciona.
Meu ambiente é a versão mais recente do zammad (2.5) com Apache2 2.4 com Postgres. Após a configuração do SSO com mod_auth_kerb, tenho que fazer o seguinte.
Eu configurei o LDAP para sincronizar nossos funcionários. Mapeei SAMACOUNTNAME para o nome de login. Por exemplo, meu nome de usuário do Windows ist schman. Então eu poderia fazer o login com este nome de usuário (não com o e-mail).
Depois disso, editei o sessions_controller.rb e adicionei a seguinte linha (na linha 173)
ENV['HTTP_REMOTE_USER']=request.env['HTTP_REMOTE_USER']
então Zammad conhece o HTTP_REMOTE_USER. Depois disso, o login não funciona. Porque o valor de HTTP_REMOTE_USER agora é [email protected]. Para corrigir isso, adiciono a seguinte linha à configuração do vHost.
RequestHeader edit REMOTE_USER "@DOMAIN.AT" ""
Após reiniciar (Apache2 e Zammad), pude fazer login no SSO com http://zammad.domain.at/auth/sso
Se alguém fala alemão, eu escrevo um post no meu blog .
@schmanat como você resolveu o "loop de login" ou deixou o usuário usar a URL "/ auth / sso"?
Por enquanto, os usuários obtêm o url / auth / sso.
Mas esta é a próxima coisa que eu gostaria de aprofundar. Não funcionou a alternativa de sua resposta a alguns comentários acima (RewriteRule)?
Sim, é verdade, mas não é muito confiável.
Obrigado a todos por seu trabalho nisso e por documentar o que você fez. Infelizmente, estou perdido. Como outros já experimentaram, eu também estou sendo redirecionado para a página de login depois de acessar o endpoint "auth / sso". Aqui está tudo o que fiz:
samaccountname
-> login
)zammad
)zammad
conta de serviço/etc/krb5.conf
)kinit
sessions_controller.rb
(conforme explicado por pikachuprof)Também tentei as soluções oferecidas por schmant, mas nada parece ajudar.
Abaixo estão meus logs do Apache2. Como você pode ver, o usuário está sendo passado ... Como posso verificar se as variáveis de ambiente REMOTE_USER
/ HTTP_REMOTE_USER
estão sendo definidas corretamente? Posso tentar outras etapas de solução de problemas?
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"
Olá,
tenho o mesmo erro que @ jeremyj563.
Existe alguma solução para fazer o login com SSO?
Obrigado pela resposta
Também estou interessado no SSO.
Seria uma opção de implementar o Azure AD para SSO.
Também estamos muito interessados. Atualmente estou testando o aplicativo no Univention Test App Center e estou muito animado.
Desculpe por chatear você: não funcionará no univention, pois o docker compose usa o nginx.
ATENÇÃO : Devemos alertá-lo para usar a implementação do SSO de qualquer forma descrita neste ou em outros problemas. As alterações fornecidas aqui contêm uma vulnerabilidade de segurança séria. Esta vulnerabilidade irá persistir sessões criadas via SSO para usuários não autenticados. Isso significa que é possível que usuários não autenticados assumam a sessão SSO criada anteriormente para um usuário (no contexto Zammad).
É altamente recomendável desabilitar o SSO até que esse problema seja resolvido.
No entanto, a boa notícia é que começamos a trabalhar na implementação oficial do SSO.
O logon único finalmente atingiu develop
graças a @rlue ! Ele fará parte do próximo lançamento 3.2 em algumas semanas. Observe que a atualização das instâncias do Zammad usando o branch develop
está interrompida no momento. Estamos trabalhando nisso. No entanto, você pode testar o SSO em um novo sistema Zammad (teste).
@MrGeneration, você pode estender a documentação para cobrir a configuração de SSO em seu próximo intervalo de tempo livre?
Houve um acompanhamento. Por favor, observe o commit acima.
Infelizmente, enfrentamos alguns obstáculos ao criar a documentação 😞 Uma contribuição na forma de um Pull Request para https://github.com/zammad/zammad-admin-documentation seria muito apreciada.
O endpoint da API é /auth/sso
. Esperamos que um dos seguintes esteja presente e contenha o atributo login
de um usuário:
REMOTE_USER
HTTP_REMOTE_USER
X-Forwarded-User
Deixe-me saber se você tiver alguma dúvida. Fico feliz em respondê-los.
Fechando agora.
Para completar: a documentação do SSO está atualmente em controle de qualidade.
https://github.com/zammad/zammad-documentation/pull/147
Comentários muito úteis
O logon único finalmente atingiu
develop
graças a @rlue ! Ele fará parte do próximo lançamento 3.2 em algumas semanas. Observe que a atualização das instâncias do Zammad usando o branchdevelop
está interrompida no momento. Estamos trabalhando nisso. No entanto, você pode testar o SSO em um novo sistema Zammad (teste).@MrGeneration, você pode estender a documentação para cobrir a configuração de SSO em seu próximo intervalo de tempo livre?