据我所知,在 PHP 中,我们需要通过 SSL 连接 LDAP 才能更改用户密码。
是否有另一种方法,例如,其他语言(JAVA / ASP)无需 SSL 即可更改 LDAP 密码?
谢谢。
更新:当我尝试修改自己的帐户密码时,我收到“警告:ldap_mod_replace() [function.ldap-mod-replace]:修改:访问权限不足”。如果我尝试更改其他用户密码,我没有收到错误消息,但密码仍然坚持旧密码。
据我所知,在 PHP 中,我们需要通过 SSL 连接 LDAP 才能更改用户密码。
是否有另一种方法,例如,其他语言(JAVA / ASP)无需 SSL 即可更改 LDAP 密码?
谢谢。
更新:当我尝试修改自己的帐户密码时,我收到“警告:ldap_mod_replace() [function.ldap-mod-replace]:修改:访问权限不足”。如果我尝试更改其他用户密码,我没有收到错误消息,但密码仍然坚持旧密码。
许多 LDAP 实现确实需要 SSL 或 TLS 才能更改/设置密码。这是 LDAP 服务器设置的要求,而不是用于访问它的语言。更改语言将不允许您覆盖此特定服务器要求。
我了解在某些情有可原的情况下,您可能无法建立 SSL/TLS 连接,但总的来说,您绝对希望像这样加密密码功能 - 即使服务器不需要它。
编辑: 我敢打赌答案可以在 slapd 日志中找到。还值得查看 ACL:OpenLDAP 软件 2.4 管理员指南,第 8 节。访问控制。
该目录将密码值存储在用户条目的 userPassword 属性中。根据服务器的访问控制设置,用户可以根据您指定的密码策略设置 userPassword 的值,使用标准工具,例如 ldapmodify。
ldapmodify -h 主机 -p 端口 -D "cn=目录管理器" -w 密码 dn: uid=bjensen,ou=人,dc=example,dc=com 更改类型:修改 替换:用户密码 用户密码:ChAnGeMe
您使用的是 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
有ldappasswd
实用程序。例如
ldappasswd -H ldap://ldap.example.com:389 -D "uid=account-name,ou=serviceaccounts,dc=example,dc=com" -S -W -ZZ
如果referral
返回,那么您需要尝试使用该服务器。通常当有一台主服务器和多台只读服务器时。
实际上,您可以在 PHP 中执行此操作,而无需使用 PHPCOM
扩展的 SSL / TLS 连接(但是 usingCOM
意味着您需要为您的应用程序使用 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
使用 RootDN 绑定更改用户密码
ldappasswd -H ldap://server_domain_or_IP -x -D "cn=admin,dc=example,dc=com" -W -S "uid=bob,ou=people,dc=example,dc=com"