Zammad: Intégration de l'authentification LDAP

Créé le 4 nov. 2016  ·  49Commentaires  ·  Source: zammad/zammad

Souhait Zammad de Markus Pfeiler :
"veuillez fournir une sorte de plug-in/d'intégration d'authentification LDAP, sinon nous ne pouvons pas utiliser le système de billetterie pour quoi que ce soit :( outh avec les comptes facebook et google ne sont pas une option dans les entreprises de plus de 10 employés - idéalement, ces canaux sont bloqués dans le premier ligne de défense pour une bonne raison :)"

feature backlog proposal

Commentaire le plus utile

des nouvelles à ce sujet?

Tous les 49 commentaires

est-ce un doublon du #58 ?

@wagnst Ceci est le nouveau numéro, le n° 58 est ancien et déjà fermé.

Remarque : Nous travaillons sur des fonctionnalités "prêtes pour l'entreprise" pour le premier trimestre 2017, qui incluront l'intégration LDAP. Restez à l'écoute.

@rolfschmidt peut-être qu'ADFS avec OAuth2 est une solution à court terme

des nouvelles à ce sujet?

Le support LDAP serait incroyable. Une mise à jour quant à la date à laquelle nous verrons ces fonctionnalités et quelles autres fonctionnalités d'entreprise sont mises en œuvre ?

Des nouvelles? Le premier trimestre 2017 arrive dans les derniers jours :)
Une chance de l'obtenir dans la mise à jour d'avril ?

Oui, cette fonctionnalité serait géniale!
Nous sommes une organisation avec environ 4000 utilisateurs et 50 agents et nous prévoyons de remplacer OTRS par Zammad. Mais sans authentification LDAP, cela n'a aucun sens.

Petite mise à jour, nous sommes en état de test. Au moins, une intégration LDAP de test bêta sera disponible dans la prochaine version (et après cette version, nous l'appellerons stable).

Un petit aperçu de la façon de l'utiliser (tout commentaire est le bienvenu - nous avons essayé de le rendre aussi simple que possible (avec la détection automatique des paramètres LDAP) - à la manière de Zammad) :
ldap-preview

@bchynds

Le support LDAP serait incroyable. Une mise à jour quant à la date à laquelle nous verrons ces fonctionnalités et quelles autres fonctionnalités d'entreprise sont mises en œuvre ?

Fonctionnalités d'entreprise : la plus importante est la gestion des rôles (et d'autres comme l'absence du bureau et l'échange).

Ça a l'air sympa. Au plaisir de tester cela avec nos 25 000 utilisateurs lorsqu'il sera disponible.

Ça a l'air sympa. Au plaisir de tester cela avec nos 25 000 utilisateurs lorsqu'il sera disponible.

🎉

Bonjour,

y a-t-il une migration/fusion d'utilisateurs d'agents existants avec LDAP ?

y a-t-il une migration/fusion d'utilisateurs d'agents existants avec LDAP ?

Pour identifier les utilisateurs déjà existants, recherchez le nom de connexion et l'adresse e-mail dans la base d'utilisateurs existante (l'un d'entre eux doit correspondre).

Salut,

Je viens de remarquer que l'intégration LDAP est maintenant dans la branche delevop. Je suis maintenant en mode test et je travaille sur "Analyse des entrées avec une configuration donnée..." pendant environ 10 minutes maintenant.

Mais nous avons environ 25 000 utilisateurs dans notre AD. Je vais attendre un peu.

@Julian0o tu es un mec rapide !

Je suis maintenant en mode test et je travaille sur "Analyse des entrées avec une configuration donnée..." pendant environ 10 minutes maintenant.

Le planificateur est-il lancé ? Dans notre environnement de test avec 9 000 utilisateurs, cela prend environ 60 secondes.

PS : Vous pouvez également démarrer manuellement les tâches d'arrière-plan en file d'attente avec rails r 'Delayed::Worker.new.work_off'

-Martin

J'étais trop rapide :) J'ai oublié de spécifier un rôle d'administrateur et je suis maintenant un utilisateur normal :)

@martini
Avez-vous des conseils pour y remédier ? Il me manque juste l'OTRS Config.pm maintenant :D

Pour récupérer le rôle d'administrateur, procédez comme suit :

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

Ensuite, connectez-vous à nouveau et vous êtes administrateur.

Merci! Maintenant deuxième essai ;)

PS : Existe-t-il un moyen d'obtenir ces commandes sans regarder profondément dans le code ?

PS : Existe-t-il un moyen d'obtenir ces commandes sans regarder profondément dans le code ?

La plupart sont des commandes standard de rails. Mais peut-être devrions-nous créer une feuille de triche...

image

La synchronisation initiale a pris environ 10 minutes.
Maintenant j'obtiens une erreur :

An error occurred: Can't connect to '' on port '389', Connection refused - connect(2) for 127.0.0.1:389
L'hôte LDAP configuré est " ldaps://xxx.lan "

Edit : Faire un deuxième essai avec une adresse IP stricte et non l'adresse DNS où 5 adresses IP sont derrière.

Possible d'obtenir le log/production.log ?

@martini Je peux envoyer le journal à votre adresse mail. Où doit-il aller ?

@martini Je peux envoyer le journal à votre adresse mail. Où doit-il aller ?

soutien à zammad point com

Bon maintenant ça marche et la synchronisation est en cours. Maintenant, synchronisation de 45 minutes avec 6k/22k.
OTRS synchronise-t-il également les utilisateurs ?

Mais pourquoi je ne peux pas changer le mappage uid? Nous utilisons le nom d'utilisateur principal pour le mappage de connexion de l'agent.

Et pourquoi je ne peux mapper que l'administrateur et l'agent en tant que "rôle". Manque-t-il seulement la gestion des rôles ou s'agit-il de la gestion finale des rôles ?

Bon maintenant ça marche et la synchronisation est en cours. Maintenant, synchronisation de 45 minutes avec 6k/22k.

Juste un avis, nous travaillons pour accélérer cela (~ 3 fois plus rapide).

OTRS synchronise-t-il également les utilisateurs ?

Les agents (et les attributions de rôles) sont synchronisés dans OTRS. Clients non, ce qui entraîne des problèmes :

a) si le client est supprimé de ldap (problèmes d'historique et de révision)
b) vous souhaitez rechercher des tickets via les attributs client - pas de vue d'ensemble, pas de déclencheurs, pas de SLA avec les attributs client (impossible, car les données se trouvent dans au moins 2 sources de données)
c) problèmes de performances pour les requêtes LDAP (peuvent également être liés au réseau)

Mais pourquoi je ne peux pas changer le mappage uid? Nous utilisons le nom d'utilisateur principal pour le mappage de connexion de l'agent.

Actuellement, nous essayons de détecter automatiquement tous les paramètres. Si vous avez des idées pour améliorer/enrichir les paramètres de configuration.

Et pourquoi je ne peux mapper que l'administrateur et l'agent en tant que "rôle". Manque-t-il seulement la gestion des rôles ou s'agit-il de la gestion finale des rôles ?

La gestion des rôles sera présente dans la prochaine version (ici, vous pouvez définir un rôle avec des autorisations). Si vous souhaitez le tester sur votre installation (installation de package), téléchargez https://raw.githubusercontent.com/zammad/zammad/develop/app/assets/javascripts/app/controllers/role.coffee et précompilez à nouveau les actifs.

screen shot 2017-04-19 at 16 30 04

D'accord, c'est logique.

Je viens de remarquer que vous pouvez vous connecter via samaccountname et Mail. C'est un bon comportement ! Pour nous : UPN = Mailaddress

Le temps de synchronisation n'est pas un problème je pense car c'est seulement la synchronisation initiale qui prend un certain temps.

Conseils pour la détection automatique des balises. Nous utilisons de nombreux services Microsoft (skype for business, exchange,...). Par défaut, vous pouvez exclure tous les attributs commençant par "ms". Vous n'avez pas besoin de la configuration d'échange ou des paramètres SIP des utilisateurs de Zammad (je pense). Cela pourrait tout accélérer.
Mon compte utilisateur a environ 45 ms Attribs.

Pour le plug-in de rôle, j'ai besoin d'informations supplémentaires ou de Google ;) J'ai téléchargé le fichier mais je ne sais pas comment précompiler les actifs.

EDIT : Je suis sur la bonne voie pour installer le plugin de rôle !

Maintenant, tout à coup, la synchronisation s'est arrêtée... Déjà redémarré tous les services et le serveur complètement. Un conseil pour relancer la synchronisation ?

Déjà fait rails r 'Delayed::Worker.new.work_off'

Mise à jour : Zammad vient de le faire tout seul ! 👍
J'ai juste attendu et tout à coup la synchronisation était terminée !

La synchronisation télécharge-t-elle des photos depuis Active Directory ? Nous les stockons dans l'attribut thumbnailPhoto.

Question suivante : À quelle fréquence la synchronisation s'exécute-t-elle ? Maintenant, c'est 24 heures plus tard et il n'y a pas eu de nouvelle synchronisation.

La synchronisation télécharge-t-elle des photos depuis Active Directory ? Nous les stockons dans l'attribut thumbnailPhoto.

Pas tout de suite. Mais une bonne idée !

Question suivante : À quelle fréquence la synchronisation s'exécute-t-elle ? Maintenant, c'est 24 heures plus tard et il n'y a pas eu de nouvelle synchronisation.

Il y a un travail dans la table du planificateur qui démarre la synchronisation toutes les heures (bien sûr, le script/scheduler.rb doit être en cours d'exécution).

Vérifiez si les tâches existent via la console rails :

Scheduler.where(name: 'Import Jobs')

Pour (re)créer le job faites :

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
)

=> #<:relation i="5">]>

Mais l'interface Web dit :
Dernière synchronisation

20.04.2017 09:30 - 20.04.2017 09:51

Salut @Julian0o - pouvez-vous s'il vous plaît vérifier le Setting.get('import_backends') ? Il devrait y avoir une entrée LDAP. Si tel est le cas, exécutez la commande ImportJob.all et publiez le résultat. Veuillez noter que la sortie contient des données confidentielles telles que le PW et votre mappage dans l'attribut payload . Le contenu de payload n'est pas pertinent et peut être complètement supprimé.

La sortie est trop grosse pour être collée depuis la console ruby. Existe-t-il un moyen d'obtenir la sortie dans un fichier?

Désolé, je suis un noob total Ruby :)

Veuillez essayer ImportJob.last.attributes.except('payload').inspect - puisque seule la dernière exécution nous intéresse. S'il est encore trop gros, vous pouvez utiliser File.write('/tmp/zammad_ldap.txt', ImportJob.last.attributes.except('payload').inspect) pour l'écrire dans le fichier /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 : ça a changé

Last sync

21.04.2017 10:32 - 21.04.2017 10:44

Merci! Hm c'est étrange 🤔 Pouvez-vous s'il vous plaît fournir le résultat de cette déclaration :
ImportJob.where(name: 'Import::Ldap', dry_run: false).order(created_at: :desc).limit(1).first.attributes.except('payload').inspect

Cette même instruction est utilisée par le contrôleur frontal LDAP qui est responsable du rendu du texte.

Je suis presque sûr que vous l'avez fait, mais juste pour des raisons de santé mentale : avez-vous essayé de recharger la page ?

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}"

Je l'ai remarqué le matin après avoir démarré le PC. J'ai donc fait un hard reload :)
Maintenant, une synchronisation est en cours. C'était peut-être un problème ponctuel.

Étrange 🤔 Cela me semble bien aussi. Ok, faites-nous savoir s'il y a quelque chose.

Salut!

J'ai également essayé le connecteur LDAP et j'ai rencontré le même problème que Julian0o ( https://github.com/zammad/zammad/issues/350#issuecomment -295259450) et je n'ai déclaré aucun groupe d'administrateurs. Donc, grâce à @martini, j'ai utilisé l'extrait de rails pour récupérer le rôle d'administrateur.

Je n'ai jamais effectué d'importation LDAP mais les groupes semblaient déjà être synchronisés.
Maintenant, mon utilisateur semble toujours avoir le rôle de client et je ne peux modifier aucun paramètre.
image

Heureusement, je suis toujours capable d'effectuer des tâches d'administration, j'ai donc créé un utilisateur administrateur indépendant mais je ne peux toujours rien changer sur le premier utilisateur.

Des idées à ce sujet?

J'ai pu résoudre ce problème en exécutant à nouveau les commandes de rails martinis. 👍

Mais j'ai encore une question : est-il acceptable que les autorisations de groupe soient synchronisées avant même que la synchronisation initiale n'ait lieu ?
Dans mon cas, j'ai réalisé que trop d'utilisateurs auraient été synchronisés et quitté l'assistant de connexion LDAP, mais je me suis retrouvé avec la situation expliquée ci-dessus.

Le LDAP-Import est suspendu depuis hier
zammadldap
Est-il possible d'arrêter/redémarrer l'import ?

Salut @SGVubmluZ0cK - pouvez-vous s'il vous plaît utiliser la console d'administration rails et me fournir la sortie de chacune des trois commandes suivantes :

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

Merci!

C'est ce que dit la console d'administration rails :

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}"

Merci beaucoup!

Salut @SGVubmluZ0cK - à première vue, tout me semble bien. Ce n'est sûrement pas le cas. Pourriez-vous s'il vous plait créer un nouveau sujet ? Il y a quelques questions sur votre système/configuration que j'ai besoin de savoir pour approfondir. Il y a aussi une demande à votre fichier production.log ce qui serait formidable si vous pouviez le fournir.
Veuillez également copier - coller la sortie des commandes ci-dessus dans votre nouveau problème afin que nous ayons tout en place. Merci!

Salut @Julian0o - le problème où Zammad a supprimé vos attributions de rôle en raison d'un groupe LDAP manquant au mappage de rôle Zammad est résolu avec le commit ci-dessus. Les utilisateurs conserveront désormais leur attribution de rôle local si aucun mappage n'est spécifié. Mais si un mappage est spécifié, le LDAP est la principale source d'attribution de rôles. Les commentaires sont appréciés 🤓

Salut les gars. L'authentification via ADFS est-elle possible ou sur les cartes pour les futures versions ? 😃

Salut @kmclea16 !

Oui, ADFS est possible puisque Zammad utilise le grand bijou omniauth pour authentifier et synchroniser les utilisateurs via des fournisseurs tiers. Il existe déjà un joyau qui fournit ADFS pour omniauth.

Cependant, il n'est pas prévu de mettre cela en œuvre dans un avenir proche, mais cela ne devrait pas être si difficile . Qui sait, peut-être que quelqu'un peut fournir une pull request ? Ce serait bien si vous pouviez créer un nouveau problème pour cela.

L'authentification LDAP est maintenant prête pour la prochaine version 1.6 de Zammad 🎉 N'hésitez pas à ouvrir de nouveaux problèmes si vous rencontrez des problèmes avec cette fonctionnalité.

@ kmclea16 - ce serait formidable de voir le problème ADFS ou même une demande d'extraction 👀

Cette page vous a été utile?
0 / 5 - 0 notes