使用LDAP檢查用戶名/密碼就像嘗試以該用戶進行綁定並注意結果那樣簡單,還是存在特殊的LDAP「檢查密碼」功能?LDAP - 如何檢查用戶名/密碼組合?
我試圖在處理凌亂的LDAP存儲庫安裝問題時多了一些「幕後」的理解。
(注:這是其中的密碼沒有存儲在自定義屬性的哈希的情況下,這種情況是便於管理)
使用LDAP檢查用戶名/密碼就像嘗試以該用戶進行綁定並注意結果那樣簡單,還是存在特殊的LDAP「檢查密碼」功能?LDAP - 如何檢查用戶名/密碼組合?
我試圖在處理凌亂的LDAP存儲庫安裝問題時多了一些「幕後」的理解。
(注:這是其中的密碼沒有存儲在自定義屬性的哈希的情況下,這種情況是便於管理)
LDAP支持比較的userPassword的。您發送密碼,服務器執行比較並返回true或false。這是不需要登錄的方式來驗證用戶。
小心使用綁定來檢查用戶名/密碼,在某些系統上它將被視爲登錄名,並且在登錄限制時可能會失敗。
使用比較是隻檢查密碼是更好的選擇。
查看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等)工作。
用戶名和密碼甚至不會作爲「WhoAmI」請求的一部分發送。所有'WhoAmi'操作都會告訴你你目前綁定的是誰。因此,說它'驗證提交的綁定憑證'是無稽之談。它沒有。它只是返回它們,或者僅僅是用戶名。這是驗證的「綁定」步驟:因此它是足夠的。在給出的示例中,首先綁定'ldapwhoami',這可能會失敗並顯示'Invalid Credentials',然後執行'WhoAmI'操作。 *任何* LDAP操作都已完成。它不一定是'WhoAmi'。 – EJP 2014-10-15 22:11:45
如果LDAP服務器中的密碼是加密的,您將如何「比較」? – 2013-04-23 14:45:16
@Ashwinkumar有一個特定的功能來做密碼比較。您提供密碼進行測試,它被類似加密,然後您可以比較這兩個值。區別在於嘗試使用這些信用進行綁定,或顯式調用ldapCompare函數。 – geoffc 2013-04-23 17:45:05
嗯..在最近的一個問題,我發佈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