2010-11-01 30 views
18

使用LDAP檢查用戶名/密碼就像嘗試以該用戶進行綁定並注意結果那樣簡單,還是存在特殊的LDAP「檢查密碼」功能?LDAP - 如何檢查用戶名/密碼組合?

我試圖在處理凌亂的LDAP存儲庫安裝問題時多了一些「幕後」的理解。

(注:這是其中的密碼沒有存儲在自定義屬性的哈希的情況下,這種情況是便於管理)

回答

16

LDAP支持比較的userPassword的。您發送密碼,服務器執行比較並返回true或false。這是不需要登錄的方式來驗證用戶。

+2

如果LDAP服務器中的密碼是加密的,您將如何「比較」? – 2013-04-23 14:45:16

+0

@Ashwinkumar有一個特定的功能來做密碼比較。您提供密碼進行測試,它被類似加密,然後您可以比較這兩個值。區別在於嘗試使用這些信用進行綁定,或顯式調用ldapCompare函數。 – geoffc 2013-04-23 17:45:05

+2

嗯..在最近的一個問題,我發佈http://stackoverflow.com/questions/16168293/how-to-do-password-authentication-for-a-user-using-ldap,我被建議使用綁定爲用密碼搜索結果。綁定最新的'DN'作品。然而,綁定本質上是一個「登錄」。執行LDAP'ldap_compare_s'失敗。有沒有一種方法可以比較LDAP用戶的密碼和密碼? – 2013-04-24 01:24:40

2

綁定,用戶就足夠了。在綁定過程中檢查密碼。

+3

這實在是一個評論,而不是一個問題的答案。請使用「添加評論」爲作者留下反饋。 – Conner 2012-08-20 05:35:35

+3

@Conner你錯了。實際上,這實際上是直接回答「檢查用戶名/密碼與嘗試綁定爲用戶一樣簡單」的問題。 – EJP 2012-08-21 05:15:54

+0

我希望我的評論不會冒犯你。此評論是由beta審查系統生成的。我個人覺得「是/否」或對特定問題的小回答更適合作爲評論。我的意思是,對於你個人而言,我毫無意義。問候。 – Conner 2012-08-21 05:41:47

4

小心使用綁定來檢查用戶名/密碼,在某些系統上它將被視爲登錄名,並且在登錄限制時可能會失敗。

使用比較是隻檢查密碼是更好的選擇。

+1

此外,使用空密碼的登錄會被視爲匿名綁定,這將始終成功。 – geoffc 2011-07-21 15:28:41

+2

我想「正確」的方法取決於你想要做什麼。在編寫將身份驗證委託給外部目錄的應用程序的常見情況中,登錄限制通常是可取的*,不是? – 2013-09-09 18:10:19

+0

我不知道'檢查密碼'和'登錄'之間可能有什麼區別,或者更確切地說,爲什麼你會想在沒有另一個的情況下做一個。 @geoffc匿名綁定只有在服務器配置爲允許時纔會成功。 – EJP 2014-10-15 22:53:36

5

查看WhoAmI擴展操作(RFC 4532)。

WhoAmI真正服務於一個目的 - 驗證提交的綁定憑證。它不應該影響也不會激起任何「登錄限制」(我知道)。

WhoAmI可以使用專用二進制(如「ldapwhoami」)完成,也可以使用Net :: LDAP :: Extension :: WhoAmI(Perl)或某些其他支持LDAP操作的此類語言完成。請注意,使用「搜索」功能「測試密碼」是一種不明智的測試方法。例如,如果我的DN是「uid = max,ou = users,dc = company,dc = com」,並且我的密碼是「@secret」,則可以通過Linux盒子上的專用二進制文件來完成此操作注-zz用於TLS保密性,這可能是不支持的或者可選的在您的環境):

ldapwhoami -x -w "@secret" -D uid=max,ou=users,dc=company,dc=com -ZZ -H ldap://address.of.your.ldapserver/ 

如果用戶名/密碼組合是正確的,返回的答案是:

DN:UID = max,ou =用戶,dc = company,dc = com

如果用戶名/密碼組合是不正確的,返回的答案是(通常):

(49)無效的證書

這可能意味着,正如我所說,密碼和/或用戶名是錯誤的,用戶不存在,或者LDAP服務器的ACL被破壞,以至於無法進行身份驗證。通常情況下,其用戶/通行組合錯誤輸入,或者用戶不存在。

最後,LDAPWhoAmI操作是一種非常輕量且簡單的驗證憑據的方法。它也可以通過其他機制(例如:Kerberos Single Sign-On,Digest-MD5等)工作。

+1

用戶名和密碼甚至不會作爲「WhoAmI」請求的一部分發送。所有'WhoAmi'操作都會告訴你你目前綁定的是誰。因此,說它'驗證提交的綁定憑證'是無稽之談。它沒有。它只是返回它們,或者僅僅是用戶名。這是驗證的「綁定」步驟:因此它是足夠的。在給出的示例中,首先綁定'ldapwhoami',這可能會失敗並顯示'Invalid Credentials',然後執行'WhoAmI'操作。 *任何* LDAP操作都已完成。它不一定是'WhoAmi'。 – EJP 2014-10-15 22:11:45