Authentication

打開 LDAP 身份驗證 - 如何在不綁定的情況下驗證使用者密碼?

  • August 21, 2009

我在做什麼…

嘗試為我們組織的所有機器、部落格、wiki、CRM、HRM、項目管理工具、SVN 等實現單點登錄……

我們在執行 CentOS 的專用伺服器上安裝和配置了 OpenLDAP。我使用 phpLdapAdmin 添加有關各種使用者、客戶端、資源的組織結構和資訊。

使用者的範例條目…

DN 是 ::cn=Bill Gates, ou=users, dc=example, dc=com

使用者名 :: bill.gates

郵件 :: bill.gates@example.com

userpassword :: as2%$%66789ds(一些 md5 神秘值)

我現在在哪裡…

OpenLDdap 工作正常。綁定測試也成功執行。

我想做的事…

使用更高權限的使用者綁定,然後通過輸入的使用者ID或郵件搜尋使用者,這與CN略有不同。重點是我想根據不屬於 RDN 的屬性對使用者進行身份驗證。

我被困在哪裡…

  1. 我無法使用使用者 ID 進行綁定,因為它不是 DN 的一部分。這一般允許嗎?
  2. 我可以使用不同的 LDAP 使用者(例如高權限使用者)進行綁定,然後執行 ldap_search 以根據過濾器 userId 獲取唯一記錄,但隨後使用者輸入密碼的 md5 與 userPassword 欄位不匹配。OpenDLdap 使用一些鹽進行加密。我也不想除鹽。有什麼出路嗎?

我的問題(最後)**

  1. 我們可以對不屬於 RDN 的屬性執行 ldap_bind 嗎?
  2. 我們可以向 OpenLDAP 伺服器發送一個未加密的密碼*(我將使用 HTTPS 隧道來保證安全)並要求 OpenLDAP 加密並檢查使用者密碼欄位嗎?*這通常是我們在所有網路應用程序中所做的,對吧?
  3. (題外話)使用者 ID 可以包含 . (點)和空格。我們需要在“First Name(givenName)”和“Last Name(sn)”之間添加一些字元。哪一個是安全字元?我的意思是世界上所有(或大多數)應用程序在使用者名中允許使用哪個非 aplha 數字字元?

我最大的擔憂是採用一種可以很容易地與大多數應用程序一起使用的方法。在我們的任務單點登錄期間,我們將修改許多基於 Web 的應用程序、桌面軟體等!

感謝您閱讀…並提前感謝您的幫助!

-拉胡爾

關於第一個問題:

我使用過另一個允許針對各種使用者屬性“登錄”的 LDAP 系統。解決方案是做兩個連接。第一個連接(可能是匿名綁定)使用使用者提供的資訊查詢 LDAP 以定位其使用者對象的 RDN。第二個連接嘗試使用發現的 RDN 和提供的密碼綁定密碼。這是一個兩步過程,並且有效。

但是,如果這個應用程序要獲得大量具有非 RDN 本身提供的屬性的登錄,那麼索引這些屬性將是一個真正的好主意。這是一個性能問題。

二:

據我所知,OpenLDAP 支持 LDAP-SSL (TCP/636),這可能是比 HTTPS 隧道更好的路由。預設情況下,LDAP 綁定是明確的,但有允許其他方法的 LDAP 擴展。例如,Active Directory 允許 NTLM LDAP 綁定,而且我很確定 LDAP 在某些時候也已經過 kerberized。我不知道 openLDAP 支持哪些方法。

三:

我的 LDAP 源在屬性中具有“firstname.lastname@org.edu”格式的電子郵件。更冒險的地方在於命名屬性,這就是我的 openLDAP 經驗平淡無奇的地方。我不知道支持什麼。我知道 Active Directory 允許在命名屬性中使用空格,而 Novell eDirectory 允許空格和句點(儘管不建議這樣做)。通常,命名屬性是使用者 ID,而 givenName、surname、emailAddress 等屬性包含特殊字元。由於它們沒有命名屬性,因此它們沒有相同的限制。

引用自:https://serverfault.com/questions/57008