2012-07-01 83 views
1

我正在嘗試修改一個基於python的驗證器(voip軟件)與我的ldap樹一起工作。python ldap屬性查詢

的LDAP認證,請訪問:

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

它的工作原理,但並不完全與我的LDAP的佈局,所以我必須要稍作修改。我知道一種可行的方法,但不幸的是,我沒有關於python的知識,而不是我從google學到的東西(儘管我還有其他一些編程專業知識)。

我的LDAP佈局是這樣的:

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

在此有存儲以及其他如userPasswordlogin屬性。

上面的python腳本是專爲使用ldap綁定進行身份驗證而設計的。在這種情況下,我必須綁定爲"charName=logindatafromapp, ou=people, dc=xxx, dc=com"。不幸的是,人們不會使用"charName"登錄,而是使用"login"這是屬性,但與"charName"不相同。

我不知道綁定到一個屬性的一種方式,所以這裏是我的想法:

  • 我第一次綁定的LDAP管理和執行在所有條目的搜索"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

「創益」是

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

你把列表的第一個元素 - 這是一個元組;那麼元組的第一個元素;這是一本字典;然後鍵值爲'charName'的字典的值;這是一個名單再次;然後是列表的第一個元素。

+0

非常感謝:)「name = res [0] [0] {'charName'} [0]」does not'work though,said syntax error。 – user912877

+0

不要忘記接受答案:) –

+0

更具體地說:文件「./LDAPauth.py」,第205行 test = res [0] [0] {'charName'} [0] ^ SyntaxError:invalid語法 – user912877

0

至少有兩個選擇:

  • 使用方法你描述使用您的信息來搜索條目,在這種情況下,由用戶輸入,然後使用該login屬性的值在簡單或SASL綁定中找到的DN或使用具有標識映射的SASL以如下方式映射authId(login屬性的值):SASL綁定將成功,其中只有login屬性的值已知

第一種方法需要搜索然後進行綁定,第二種方法可能要求用戶條目具有可逆密碼(根據所選SASL機制,AES是一種很好的加密方案)。使用帶有DIGEST-MD5機制的SASL將提供一種按照描述映射身份的方法(所有專業品質的LDAP服務器都支持這種映射機制),並且不需要通過網絡清楚地發送密碼,但具有缺點沒有像使用簡單的綁定那樣安全,其中密碼存儲爲鹽漬SHA-2摘要。儘管不應使用DIGEST-MD5,因爲它需要可逆的密碼,因此不像使用強大的SHA-2(含鹽)那樣安全,因此它可用於需要它的應用程序。