python ldap属性查询

时间:2012-07-01 16:14:31

标签: python ldap

我正在尝试修改基于python的-mutomator for murmur(voip软件)以使用我的ldap树。

LDAP身份验证器位于:

http://www.winex.org/linux/zealot/src/mumble-scripts/Authenticators/LDAP/LDAPauth.py

它可以工作,但不是我的ldap布局,所以我必须稍微修改它。我知道一种方法可行,但不幸的是我对python的了解不比我从谷歌学到的知识(我还有其他一些编程专业知识)。

我的ldap布局如下所示:

charName=xxx, ou=people, dc=xxx, dc=com

在此之下存储了一些属性,例如userPasswordlogin等。

上面的python脚本专门用于使用ldap绑定进行身份验证。在这种情况下,我必须绑定为"charName=logindatafromapp, ou=people, dc=xxx, dc=com"。很遗憾,人们不会使用"charName"登录,但使用"login"这是一个属性,但与"charName"不一样。

我不知道绑定到属性的方法,所以这是我的想法:

  • 我首先绑定为ldap admin并对"logindatafromapp"的所有条目执行搜索,并将该值与"login"匹配。如果找到匹配项,我会抓取匹配的"charName"并按照原先的预期重新绑定charName

我目前停留在查询"charName"值并将该值分配给变量,因此我可以在第二个ldap绑定中使用它(谷歌并没有真正帮助我)。

这是我的代码:

ldap_conn = ldap.initialize(ldap_uri, 0)
ldap_conn.bind_s("cn=admin,dc=xxxxxxxx,dc=com","pass")
res = ldap_conn.search_s('ou=people,dc=xxxxxx,dc=com', ldap.SCOPE_ONELEVEL,'login=trony',['charName'])
print(res)

然后打印"[('charName=Trony,ou=people,dc=xxxxxxx,dc=com', {'charName': ['Trony']})]"

"login=trony")是一个临时过滤器,我必须用applogin var替换。我现在的问题是如何将"Trony"(在这种情况下)分配给变量?输出似乎是一个特殊的结构?

2 个答案:

答案 0 :(得分:3)

'Trony'在

res[0][1]['charName'][0]

你接受列表的第一个元素 - 它是一个元组;然后是元组的第一个元素;这是一本字典;然后键'charName'的字典值;这又是一个清单;然后是列表的第一个元素。

答案 1 :(得分:0)

至少有两种选择:

  • 使用您描述的方法使用您拥有的信息搜索条目,在这种情况下是用户输入的login属性的值,然后使用在简单或SASL中找到的DN绑定或
  • 使用带有标识映射的SASL映射authId(login属性的值),使SASL绑定成功,只知道login属性的值

第一种方法需要搜索,然后是绑定,第二种方法可能要求用户条目具有可逆密码(AES是用于此目的的良好加密方案),具体取决于所选的SASL机制。使用带有DIGEST-MD5机制的SASL将提供一种映射身份的方法(所有专业质量的LDAP服务器都支持这种映射机制)并且不需要通过网络明确发送密码,但是有缺点不像使用简单绑定那样安全,其中密码存储为salted SHA-2摘要。虽然不应该使用DIGEST-MD5,因为它需要可逆密码,因此不如使用强SHA-2(含盐)那么安全,它可用于需要它的应用程序。