如何使用LDAP检查Active Directory用户凭据?

时间:2012-04-02 17:23:49

标签: ldap

我正在寻找一个基本的ldap脚本,用于检查用户/密码组合的Active Directory。

我提到过,LDAP的身份验证是使用另一个帐户完成的,而不是正在验证的帐户。

这是我不完整的脚本:

#!/usr/bin/env python
import ldap
import sys

Server = "ldap://pdc01.example.com"
DN = "EXAMPLE\username"
Secret = "pass"
un = "john"
un_password = "hispass"
Base = "dc=example,dc=com"

Scope = ldap.SCOPE_SUBTREE
Filter = "(&(objectClass=user)(sAMAccountName="+un+"))"
Attrs = ["displayName"]

l = ldap.initialize(Server)
l.set_option(ldap.OPT_REFERRALS, 0)
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

# TODO: I get `john`'s Username but how to check his password ?

l.unbind()

1 个答案:

答案 0 :(得分:4)

如果要检查的条目的可分辨名称及其凭据已知,传输包含凭据的简单绑定请求,如果成功,则密码正确且帐户可用(相反)被锁定或禁用)。或者,SASL机制可以与绑定请求一起使用。

如果未知专有名称,则使用具有足够授权的连接将搜索请求发送到目录服务器,以读取条目的可分辨名称。搜索请求必须包含条目应该从属的基础对象,应该使用最严格的范围(如果不知道可分辨名称,则为onesub),应该在给定已知信息的情况下使用限制性最强的过滤器,并请求属性1.1,因为所需要的只是条目的可分辨名称。假设搜索成功,搜索响应将包含条目的可分辨名称。知道专有名称后,如上所述发送绑定请求。

另见