使用PHP,是否可以执行RFC 3062中指定的LDAP密码修改扩展操作?我正在使用的LDAP目录中的密码哈希方案可能会定期更改,因此我的理解是我不能根据特定方案散列新密码,例如{SHA},我需要使用扩展操作代替并让目录进行散列。那是对的吗? ldap_set_option的帮助页面表明它可能是可能的,但我确定无法在网络上的任何地方找到任何示例代码。也许我只是在失去我的谷歌。 TIA
答案 0 :(得分:1)
LDAP客户端绝不能将预编码的密码传输到目录服务器 - 密码必须始终通过安全连接以明文形式传输,因为现代的,专业质量的目录服务器只有在提供时才能执行密码质量检查和密码历史记录检查明文密码。
如果PHP支持扩展操作和扩展响应,则支持密码修改扩展操作(需要现有密码,如果没有提供新密码则可以生成密码)。我不是PHP专家,但我相信set_option可用于控件(附加到操作),但我不知道PHP是否支持LDAP扩展操作。
答案 1 :(得分:0)
对于遇到这个问题的任何人来说:在PHP> 7.0中,确实可以执行LDAP扩展操作。有关PHP中的ExOps的常规信息,请参见the PHP reference。
还有一个专门用于密码更改操作的功能(也来自PHP reference):
ldap_exop_passwd($ds, "uid=youruser,ou=People,dc=example,dc=com", "oldpasswd", "secureNewPassword");
$ds
是LDAP链接标识符,由ldap_connect()
返回。
答案 2 :(得分:-2)
如果您正在处理密码加密,那么您可以将其哈希到您想要的加密方法。
对于MD5: $ pass_ldap ='{MD5}'。 base64_encode(pack('H *',md5($ pass)));
对于SHA-1: $ pass_ldap ='{SHA}'。 base64_encode(pack('H *',sha1($ pass)));
然后,您可以使用ldap_modify更新现有用户密码,或ldap_add使用加密密码添加新用户。
我已经这样做了,我认为LDAP服务器使用“{}”值来确定正在使用的格式。