Zammad: Integração de autenticação LDAP

Criado em 4 nov. 2016  ·  49Comentários  ·  Fonte: zammad/zammad

Zammad desejo de Markus Pfeiler:
"Por favor, forneça algum tipo de plug-in/integração de autenticação LDAP, caso contrário, não podemos usar o sistema de tíquetes para nada :(outh w/ facebook e contas do google não são opção em qualquer empresa com mais de 10 funcionários - idealmente esses canais são bloqueados no primeiro linha de defesa por um bom motivo :)"

feature backlog proposal

Comentários muito úteis

Alguma novidade sobre isso?

Todos 49 comentários

esta é uma duplicata de # 58?

@wagnst Esta é a nova edição, a nº 58 é antiga e já foi encerrada.

Observação: estamos trabalhando em recursos "prontos para empresas" para o primeiro trimestre de 2017, que incluirão integração LDAP. Fique ligado.

@rolfschmidt talvez ADFS com OAuth2 seja uma solução de curto prazo

Alguma novidade sobre isso?

O suporte LDAP seria incrível. Alguma atualização sobre quando veremos esses recursos e quais outros recursos corporativos estão sendo implementados?

Qualquer notícia? O primeiro trimestre de 2017 está chegando nos últimos dias :)
Alguma chance de conseguir isso na atualização de abril?

Sim, esse recurso seria ótimo!
Somos uma organização com cerca de 4000 usuários e 50 agentes e estamos planejando substituir o OTRS pelo Zammad. Mas sem autenticação LDAP não faz sentido.

Pequena atualização, estamos em estado de teste. Pelo menos haverá uma integração LDAP de teste beta disponível na próxima versão (e depois dessa versão a chamamos de estável).

Uma pequena prévia sobre como usá-lo (qualquer feedback é bem-vindo - tentamos facilitar ao máximo (com detecção automática das configurações do ldap) - do jeito Zammad):
ldap-preview

@bchynds

O suporte LDAP seria incrível. Alguma atualização sobre quando veremos esses recursos e quais outros recursos corporativos estão sendo implementados?

Recursos corporativos: o mais importante é o gerenciamento de funções (e outros, como fora do escritório e intercâmbio).

Isso parece bom. Ansioso para testar isso com nossos 25 mil usuários quando estiver disponível.

Isso parece bom. Ansioso para testar isso com nossos 25 mil usuários quando estiver disponível.

🎉

Olá,

existe uma migração/fusão de usuários de agentes existentes com o LDAP?

existe uma migração/fusão de usuários de agentes existentes com o LDAP?

Para identificar usuários já existentes, pesquise por login e endereço de e-mail na base de usuários existente (um deles deve corresponder).

Olá,

Acabei de notar que a integração do ldap está agora no branch delevop. Estou agora no modo de teste e está trabalhando em "Analisando entradas com determinada configuração ..." por cerca de 10 minutos agora.

Mas temos cerca de 25 mil usuários em nosso AD. vou esperar um pouco.

@Julian0o você é rápido cara!

Estou agora no modo de teste e está trabalhando em "Analisando entradas com determinada configuração ..." por cerca de 10 minutos agora.

O agendador foi iniciado? Em nosso ambiente de teste com 9 mil usuários, leva cerca de 60 segundos.

PS: Você pode iniciar os trabalhos em segundo plano enfileirados também manualmente com rails r 'Delayed::Worker.new.work_off'

-Martin

Eu era muito rápido :) Esqueci de especificar uma função de administrador e agora sou um usuário normal :)

@martini
Você tem algum conselho para corrigir isso? Só falta o OTRS Config.pm agora :D

Para recuperar a função de administrador, faça o seguinte:

rails c
u = User.find_by(email: '[email protected]')
u.roles = Role.where(name: ['Agent', 'Admin'])
u.save!

Em seguida, faça o login novamente e você será o administrador.

Obrigado! Agora segunda tentativa ;)

PS: Existe uma maneira de obter esses comandos sem olhar profundamente no código?

PS: Existe uma maneira de obter esses comandos sem olhar profundamente no código?

A maioria são comandos padrão do Rails. Mas talvez devêssemos criar uma folha de dicas....

image

A sincronização inicial levou cerca de 10 minutos.
Agora recebo um erro:

An error occurred: Can't connect to '' on port '389', Connection refused - connect(2) for 127.0.0.1:389
Host LDAP configurado é " ldaps://xxx.lan "

Edit: Fazendo uma segunda tentativa com o endereço IP strickt e não o endereço dns, onde 5 endereços IP estão atrás.

É possível obter o log/production.log?

@martini posso enviar o log para seu endereço de e-mail. Onde deve ir?

@martini posso enviar o log para seu endereço de e-mail. Onde deve ir?

suporte em zammad ponto com

Ok, agora está funcionando e a sincronização está acontecendo. Agora sincronizando 45 minutos com 6k/22k.
O OTRS sincroniza usuários também?

Mas por que não posso alterar o mapeamento de uid? Usamos o userprincipalname para mapeamento de login do agente.

E por que só posso mapear o administrador e o agente como "função". Está faltando apenas o gerenciamento de funções ou esse é o gerenciamento final de funções?

Ok, agora está funcionando e a sincronização está acontecendo. Agora sincronizando 45 minutos com 6k/22k.

Apenas um aviso, trabalhamos para acelerar isso (~3 vezes mais rápido).

O OTRS sincroniza usuários também?

Os agentes (e atribuições de função) são sincronizados no OTRS. Clientes não, o que leva a problemas:

a) se o cliente for removido do ldap (problemas de histórico e revisão)
b) você deseja pesquisar tickets por meio de atributos do cliente - sem visão geral, sem acionadores, sem sla's com atributos do cliente (não é possível, porque os dados estão no mínimo 2 fontes de dados)
c) problemas de desempenho para consultas ldap (também podem estar relacionados à rede)

Mas por que não posso alterar o mapeamento de uid? Usamos o userprincipalname para mapeamento de login do agente.

Atualmente tentamos detectar automaticamente todas as configurações. Se você tiver ideias de como melhorar/enriquecer as configurações.

E por que só posso mapear o administrador e o agente como "função". Está faltando apenas o gerenciamento de funções ou esse é o gerenciamento final de funções?

O gerenciamento de função estará lá na próxima versão (aqui você pode definir a função com permissões). Se você quiser testá-lo em sua instalação (instalação de pacote), baixe https://raw.githubusercontent.com/zammad/zammad/develop/app/assets/javascripts/app/controllers/role.coffee e pré-compile os ativos novamente.

screen shot 2017-04-19 at 16 30 04

Ok, isso faz sentido.

Acabei de notar que você pode fazer login via samaccountname e Mail. Isso é um bom comportamento! Para nós: UPN = Mailadress

O tempo de sincronização não é um problema, eu acho, porque é apenas a sincronização inicial que demora um pouco.

Conselhos para a detecção automática de tags. Usamos muitos serviços da microsoft (skype para negócios, troca,...). Por padrão, você pode excluir todos os atributos que começam com "ms". Você não precisa da configuração de troca ou sip Settings dos usuários no Zammad (eu acho). Isso pode acelerar tudo.
Minha conta de usuário tem cerca de 45 ms Attribs.

Para o Role Plugin eu preciso de algumas informações adicionais ou pesquisando no Google ;) Eu carreguei o arquivo, mas não sei como pré-compilar ativos.

EDIT: Estou em uma boa maneira de instalar o plugin de função!

Agora de repente a sincronização parou... Já reiniciei todos os serviços e o servidor por completo. Algum conselho para reiniciar a sincronização?

Já fez rails r 'Delayed::Worker.new.work_off'

Atualização: Zammad fez isso sozinho! 👍
Apenas esperei e de repente a sincronização foi concluída!

A sincronização baixa fotos do diretório ativo? Nós os armazenamos no atributo thumbnailPhoto.

Próxima pergunta: Com que frequência a sincronização é executada? Agora são 24 horas depois e não houve nova sincronização.

A sincronização baixa fotos do diretório ativo? Nós os armazenamos no atributo thumbnailPhoto.

Não agora. Mas uma boa ideia!

Próxima pergunta: Com que frequência a sincronização é executada? Agora são 24 horas depois e não houve nova sincronização.

Há um trabalho na tabela do agendador que está iniciando a sincronização a cada hora (é claro que o script/scheduler.rb precisa estar em execução).

Verifique se os jobs existem via console do Rails:

Scheduler.where(name: 'Import Jobs')

Para (re)criar o trabalho, faça:

Scheduler.create_or_update(
  name:          'Import Jobs',
  method:       'ImportJob.start_registered',
  period:        1.hour,
  prio:          1,
  active:        true,
  updated_by_id: 1,
  created_by_id: 1
)

=> #<:relação i="5">]>

Mas a Webinterface diz:
Última sincronização

20.04.2017 09:30 - 20.04.2017 09:51

Oi @Julian0o - você pode verificar o Setting.get('import_backends') ? Deve haver uma entrada LDAP. Se sim, execute o comando ImportJob.all e poste o resultado. Esteja ciente de que a saída contém dados confidenciais como o PW e seu mapeamento no atributo payload . O conteúdo de payload não é relevante e pode ser deletado completamente.

A saída é grande demais para colar do console ruby. Existe uma maneira de obter a saída em um arquivo?

Desculpe, sou um total noob rubi :)

Por favor, tente ImportJob.last.attributes.except('payload').inspect - já que estamos interessados ​​apenas na última execução. Se ainda for muito grande, você pode usar File.write('/tmp/zammad_ldap.txt', ImportJob.last.attributes.except('payload').inspect) para gravá-lo no arquivo /tmp/zammad_ldap.txt .

irb(main):001:0> ImportJob.last.attributes.except('payload').inspect
=> "{\"id\"=>10, \"name\"=>\"Import::Ldap\", \"dry_run\"=>false, \"result\"=>{\"skipped\"=>122, \"created\"=>10, \"updated\"=>27, \"unchanged\"=>22256, \"failed\"=>0, \"sum\"=>22415, \"role_ids\"=>{3=>{\"created\"=>10, \"updated\"=>25, \"unchanged\"=>22220, \"failed\"=>0}, 2=>{\"created\"=>0, \"updated\"=>2, \"unchanged\"=>36, \"failed\"=>0}, 1=>{\"created\"=>0, \"updated\"=>1, \"unchanged\"=>5, \"failed\"=>0}}}, \"started_at\"=>Fri, 21 Apr 2017 08:32:15 UTC +00:00, \"finished_at\"=>Fri, 21 Apr 2017 08:44:07 UTC +00:00, \"created_at\"=>Fri, 21 Apr 2017 08:32:15 UTC +00:00, \"updated_at\"=>Fri, 21 Apr 2017 08:44:07 UTC +00:00}"

EDIT: Mudou

Last sync

21.04.2017 10:32 - 21.04.2017 10:44

Obrigado! Hm isso é estranho 🤔 Você pode fornecer a saída desta declaração:
ImportJob.where(name: 'Import::Ldap', dry_run: false).order(created_at: :desc).limit(1).first.attributes.except('payload').inspect

Esta mesma instrução é usada pelo controlador frontend LDAP que é responsável por renderizar o texto.

Tenho certeza que sim, mas apenas por razões de sanidade: você tentou recarregar a página?

irb(main):001:0> ImportJob.where(name: 'Import::Ldap', dry_run: false).order(created_at: :desc).limit(1).first.attributes.except('payload').inspect
=> "{\"id\"=>12, \"name\"=>\"Import::Ldap\", \"dry_run\"=>false, \"result\"=>{\"skipped\"=>110, \"created\"=>0, \"updated\"=>14, \"unchanged\"=>14176, \"failed\"=>0, \"sum\"=>22415, \"role_ids\"=>{3=>{\"created\"=>0, \"updated\"=>14, \"unchanged\"=>14145, \"failed\"=>0}, 2=>{\"created\"=>0, \"updated\"=>0, \"unchanged\"=>31, \"failed\"=>0}, 1=>{\"created\"=>0, \"updated\"=>0, \"unchanged\"=>5, \"failed\"=>0}}}, \"started_at\"=>Fri, 21 Apr 2017 10:33:07 UTC +00:00, \"finished_at\"=>nil, \"created_at\"=>Fri, 21 Apr 2017 10:33:07 UTC +00:00, \"updated_at\"=>Fri, 21 Apr 2017 10:40:31 UTC +00:00}"

eu notei isso de manhã depois de inicializar o pc. Então eu fiz um hard reload :)
Agora uma sincronização está em execução. Talvez tenha sido um problema de timer.

Estranho 🤔 Isso também me parece bom. Ok, apenas deixe-nos saber se houver alguma coisa.

Oi!

Eu também tentei o conector LDAP e encontrei o mesmo problema que o Julian0o ( https://github.com/zammad/zammad/issues/350#issuecomment -295259450) e não declarei nenhum grupo de administração. Então, graças a @martini , usei o trecho de trilhos para recuperar a função de administrador.

Eu nunca completei uma importação LDAP, mas os grupos pareciam já estar sincronizados.
Agora, meu usuário ainda parece ter a função de cliente e não posso alterar nenhuma configuração.
image

Felizmente, ainda sou capaz de executar tarefas administrativas, então criei um usuário administrador independente, mas ainda não consigo alterar nada no primeiro usuário.

Alguma idéia sobre isso?

Consegui resolver isso executando novamente os comandos martinis rails. 👍

Mas ainda tenho uma pergunta - tudo bem que as permissões do grupo sejam sincronizadas mesmo antes da sincronização inicial?
No meu caso, percebi que muitos usuários teriam sido sincronizados e saído do LDAP-Connection-Wizard, mas me encontrei com a situação explicada acima.

O LDAP-Import está suspenso desde ontem
zammadldap
É possível parar/reiniciar a importação?

Oi @SGVubmluZ0cK - você pode usar o console de administração do Rails e me fornecer a saída de cada um dos três comandos a seguir:

Setting.get('import_backends')

ImportJob.last.attributes.except('payload').inspect

ImportJob.where(name: 'Import::Ldap', dry_run: false).order(created_at: :desc).limit(1).first.attributes.except('payload').inspect

Obrigado!

Isso é o que o console de administração do Rails diz:

irb(main):004:0> Setting.get('import_backends')
=> ["Import::Ldap"]
irb(main):005:0> ImportJob.last.attributes.except('payload').inspect
=> "{\"id\"=>55, \"name\"=>\"Import::Ldap\", \"dry_run\"=>false, \"result\"=>{\"skipped\"=>2, \"created\"=>2, \"updated\"=>0, \"unchanged\"=>496, \"failed\"=>0, \"sum\"=>2403, \"role_ids\"=>{3=>{\"created\"=>2, \"updated\"=>0, \"unchanged\"=>493, \"failed\"=>0}, 2=>{\"created\"=>0, \"updated\"=>0, \"unchanged\"=>3, \"failed\"=>0}, 1=>{\"created\"=>0, \"updated\"=>0, \"unchanged\"=>1, \"failed\"=>0}}}, \"started_at\"=>Wed, 26 Apr 2017 09:57:42 UTC +00:00, \"finished_at\"=>nil, \"created_at\"=>Wed, 26 Apr 2017 09:57:42 UTC +00:00, \"updated_at\"=>Wed, 26 Apr 2017 10:00:11 UTC +00:00}"
irb(main):006:0> ImportJob.where(name: 'Import::Ldap', dry_run: false).order(created_at: :desc).limit(1).first.attributes.except('payload').inspect
=> "{\"id\"=>55, \"name\"=>\"Import::Ldap\", \"dry_run\"=>false, \"result\"=>{\"skipped\"=>2, \"created\"=>2, \"updated\"=>0, \"unchanged\"=>496, \"failed\"=>0, \"sum\"=>2403, \"role_ids\"=>{3=>{\"created\"=>2, \"updated\"=>0, \"unchanged\"=>493, \"failed\"=>0}, 2=>{\"created\"=>0, \"updated\"=>0, \"unchanged\"=>3, \"failed\"=>0}, 1=>{\"created\"=>0, \"updated\"=>0, \"unchanged\"=>1, \"failed\"=>0}}}, \"started_at\"=>Wed, 26 Apr 2017 09:57:42 UTC +00:00, \"finished_at\"=>nil, \"created_at\"=>Wed, 26 Apr 2017 09:57:42 UTC +00:00, \"updated_at\"=>Wed, 26 Apr 2017 10:00:11 UTC +00:00}"

Muito obrigado!

Oi @SGVubmluZ0cK - à primeira vista, tudo parece bem para mim. Certamente não é. Você poderia criar um novo problema? Existem algumas perguntas sobre o seu sistema/configuração que eu preciso saber para aprofundar. Há também uma solicitação para o seu arquivo production.log o que seria ótimo se você pudesse fornecê-lo.
Por favor, também copie - cole a saída dos comandos acima em seu novo problema para que tenhamos tudo no lugar. Obrigado!

Oi @ Julian0o - o problema em que o Zammad removeu suas atribuições de função devido à falta do grupo LDAP para o mapeamento de funções do Zammad foi corrigido com o commit acima. Os usuários agora manterão sua atribuição de função local se nenhum mapeamento for especificado. Mas se um mapeamento for especificado, o LDAP será a fonte principal para atribuições de função. O feedback é apreciado 🤓

Oi pessoal. A autenticação via ADFS é possível ou nos cartões para versões futuras? 😃

Olá @kmclea16!

Sim, o ADFS é possível, pois o Zammad usa a grande gema omniauth para autenticar e sincronizar usuários por meio de provedores de terceiros. Já existe uma gem que fornece ADFS para omniauth.

No entanto, não há planos para implementar isso em um futuro próximo, mas não deve ser tão difícil . Quem sabe, talvez alguém possa fornecer um pull request? Seria ótimo se você pudesse criar um novo problema para isso.

A autenticação LDAP já está pronta para a próxima versão 1.6 do Zammad 🎉 Sinta-se à vontade para abrir novos problemas se tiver problemas com essa funcionalidade.

@kmclea16 - seria ótimo ver o problema do ADFS ou até mesmo um pull request 👀

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