我正在尝试修改基于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
在此之下存储了一些属性,例如userPassword
和login
等。
上面的python脚本专门用于使用ldap绑定进行身份验证。在这种情况下,我必须绑定为"charName=logindatafromapp, ou=people, dc=xxx, dc=com"
。很遗憾,人们不会使用"charName"
登录,但使用"login"
这是一个属性,但与"charName"
不一样。
我不知道绑定到属性的方法,所以这是我的想法:
"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"
(在这种情况下)分配给变量?输出似乎是一个特殊的结构?
答案 0 :(得分:3)
'Trony'在
res[0][1]['charName'][0]
你接受列表的第一个元素 - 它是一个元组;然后是元组的第一个元素;这是一本字典;然后键'charName'的字典值;这又是一个清单;然后是列表的第一个元素。
答案 1 :(得分:0)
至少有两种选择:
login
属性的值,然后使用在简单或SASL中找到的DN绑定或login
属性的值),使SASL绑定成功,只知道login
属性的值第一种方法需要搜索,然后是绑定,第二种方法可能要求用户条目具有可逆密码(AES是用于此目的的良好加密方案),具体取决于所选的SASL机制。使用带有DIGEST-MD5机制的SASL将提供一种映射身份的方法(所有专业质量的LDAP服务器都支持这种映射机制)并且不需要通过网络明确发送密码,但是有缺点不像使用简单绑定那样安全,其中密码存储为salted SHA-2摘要。虽然不应该使用DIGEST-MD5,因为它需要可逆密码,因此不如使用强SHA-2(含盐)那么安全,它可用于需要它的应用程序。