2011-01-27 298 views
4

據我所知,在PHP中,我們需要通過SSL連接LDAP以更改用戶密碼。LDAP更改用戶密碼

有沒有另一種方式,E.G,其他語言(JAVA/ASP)更改LDAP密碼而不需要SSL?

謝謝。

更新: 當我嘗試修改自我帳戶密碼時,出現「Warning:ldap_mod_replace()[function.ldap-mod-replace]:Modify:Insufficient access」。 如果我嘗試更改其他用戶密碼,則不會收到錯誤消息,但密碼仍然保留原來的密碼。

+2

這可能取決於您使用的LDAP服務。 – 2011-01-27 02:47:07

回答

4

許多LDAP實現確實需要SSL或TLS才能更改/設置密碼。這是由LDAP服務器設置的要求,而不是用於訪問它的語言。更改語言不會允許您覆蓋此特定的服務器要求。

我知道有些情況下你可能無法建立SSL/TLS連接,但一般情況下,你絕對想要加密這樣的密碼功能 - 即使服務器不需要它。

編輯:我敢打賭,答案可以在slapd日誌中找到。還值得查看ACL:OpenLDAP Software 2.4 Administrator's Guide, Section 8. Access Control

+0

我知道一個允許用戶重置/更改密碼的軟件,雖然我的當前LDAP沒有啓用SSL。 http://www.manageengine.com/products/self-service-password/index.html – neobie 2011-01-31 05:39:43

+0

@neobie也許我誤解了你的問題。這聽起來像是你想繞過你的ldap服務器規定的ssl要求。我很高興你能工作! – xelco52 2011-01-31 06:37:00

3

該目錄將密碼值存儲在用戶 條目的userPassword屬性中。根據服務器的訪問控制設置,用戶可以根據您指定的密碼策略,使用 標準工具(例如ldapmodify)設置userPassword的 值。

 
ldapmodify -h host -p port -D "cn=Directory Manager" -w password 
dn: uid=bjensen,ou=People,dc=example,dc=com 
changetype: modify 
replace: userPassword 
userPassword: ChAnGeMe 
1

您使用OpenLDAP或Active Directory嗎?他們都需要一個安全的連接來讓你改變你的密碼。

您不能使用ldap_mod_replace使用PHP更改您的Active Directory密碼,如果您不是管理員,則必須使用ldap_modify_batch。

請看:https://msdn.microsoft.com/en-us/library/cc223248.aspx

如果使用替代(你不把你的舊密碼)只有管理員可以更改密碼。但是,如果您使用刪除(使用舊密碼)和添加(使用新密碼)的批次,則用戶可以更改他/她自己的密碼:http://php.net/ldap-modify-batch

1

ldappasswd實用程序。例如

ldappasswd -H ldap://ldap.example.com:389 -D "uid=account-name,ou=serviceaccounts,dc=example,dc=com" -S -W -ZZ 

如果返回referral,那麼您需要嘗試使用該服務器。通常當有一個主服務器和多個只讀服務器時。

0

實際上,您可以在PHP中執行此操作,但不使用PHP COM擴展名的SSL/TLS連接(但使用COM表示您需要爲您的應用程序使用Windows操作系統)。

使用COM還旁路您的AD服務器的密碼策略複雜性要求(不知道爲什麼)。

$dn = 'cn=John Doe,dc=acme,dc=org'; 

$ldap = new COM('LDAP:'); 

$user = $ldap->OpenDSObject('LDAP://ACME-DC01.corp.acme.org/'.$dn, 'admin-username', 'admin-password', 1); 

$user->SetPassword('NewPassword'); 

$user->SetInfo(); // Saved