96 votes

L'authentification active directory à l'aide de python + ldap

Comment authentifier contre la maladie d'alzheimer à l'aide de Python + LDAP. Je suis actuellement en utilisant python-ldap bibliothèque et il est la production est en larmes.

Je ne peux même pas se lier à effectuer une requête simple:

import sys
import ldap


Server = "ldap://my-ldap-server"
DN, Secret, un = sys.argv[1:4]

Base = "dc=mydomain,dc=co,dc=uk"
Scope = ldap.SCOPE_SUBTREE
Filter = "(&(objectClass=user)(sAMAccountName="+un+"))"
Attrs = ["displayName"]

l = ldap.initialize(Server)
l.protocol_version = 3
print l.simple_bind_s(DN, Secret)

r = l.search(Base, Scope, Filter, Attrs)
Type,user = l.result(r,60)
Name,Attrs = user[0]
if hasattr(Attrs, 'has_key') and Attrs.has_key('displayName'):
  displayName = Attrs['displayName'][0]
  print displayName

sys.exit()

L'exécution de ce avec myusername@mydomain.co.uk password username donne moi l'une des deux erreurs:

Invalid Credentials - Quand j'ai une faute de frappe ou d'utiliser de façon intentionnelle de mauvaises références, il ne parvient pas à s'authentifier.

ldap.INVALID_CREDENTIALS: {'info': '80090308: LdapErr: DSID-0C090334, commentaire: erreur, les données 52e, vece', 'desc': 'Invalid credentials'}

Ou

ldap.OPERATIONS_ERROR: {'info': '00000000: LdapErr: DSID-0C090627, commentaire: pour effectuer cette opération un succès de la liaison doit être effectuée sur la connexion., données 0, vece', 'desc': 'erreur dans les Opérations'}

Ce qui me manque pour lier correctement?

J'obtiens les mêmes erreurs sur fedora et windows.

52voto

1729 Points 1662

J'ai été absent

l.set_option(ldap.OPT_REFERRALS, 0)

À partir de l'init.

31voto

davidavr Points 6670

Si vous êtes ouvert à l'aide de pywin32, vous pouvez utiliser des appels Win32 à partir de Python. C'est ce que nous faisons dans notre CherryPy serveur web:

import win32security
token = win32security.LogonUser(
    username,
    domain,
    password,
    win32security.LOGON32_LOGON_NETWORK,
    win32security.LOGON32_PROVIDER_DEFAULT)
authenticated = bool(token)

7voto

alfredocambera Points 539

Cela a fonctionné pour moi, l'.set_option(ldap.OPT_REFERRALS, 0) a été la clé pour accéder à l'ActiveDirectory. En outre, je pense que vous devriez ajouter un "con.unbind()" pour fermer la connexion, avant de terminer le script.

3voto

Dima Pasechnik Points 131

si vous avez Kerberos installé et de parler à des ANNONCES, comme ce serait le cas, par exemple, Centrify Express est installé et en cours d'exécution, vous pouvez simplement utiliser python-kerberos. E. g.

import kerberos
kerberos.checkPassword('joe','pizza','krbtgt/x.pizza.com','X.PIZZA.COM')`

serait Vrai retour d'un utilisateur 'joe' a un mot de passe "pizza" dans le domaine Kerberos X.PIZZA.COM. (en général, je pense, le dernier serait le même que le nom de Domaine AD)

2voto

Daniel Bungert Points 170

Je vois votre commentaire @Johan Buret sur le DN de ne pas résoudre votre problème, mais je crois aussi qu'est ce que vous devriez regarder dans.

Compte tenu de votre exemple, le DN du compte administrateur par défaut dans l'ANNONCE seront les suivantes: cn=Administrateur,cn=Users,dc=mydomain,dc=co,dc=royaume-uni - s'il vous plaît essayer.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X