繁体   English   中英

如何在php中使用LDAP从Active Directory搜索和更新用户数据?

[英]How search and update user data from Active Directory using LDAP in php?

我使用php 5.6,并尝试通过php中的LDAP在Active Directory中搜索用户。 搜索示例:

ldap_connect($host, '389');
ldap_search($client, 'DC=shamsa,DC=real,DC=kamchatka,DC=ru', '(&(objectClass=user)(CN=user_name))', '*');

我成功获取了用户数据,但是userPassword在返回的字段中不存在。 我需要用户密码来比较活动数据中的密码和用户输入的密码。

我如何从Active Data获取用户密码,或者如何比较用户输入的密码和Active Directory中的密码而不获取?

顺便说一句,我还需要更新Active Directory中的用户数据。 例如,更新名称和电子邮件字段。 我该怎么做?

谢谢你的回答。

如果只想将登录界面中提供的用户密码与LDAP / Active Directory中存储的密码进行比较,则应将ldap_bind命令与用户dn和密码一起使用。 如果密码和用户名/ DN匹配,则返回true,否则返回false。

要获取DN,通常需要与对ldap具有读取访问权限的已知用户绑定,请按用户名搜索该用户,然后再次与返回的用户DN和密码绑定。 https://gist.github.com/heiglandreas/5689592上有一个说明要点的要点

如果您还想设置用户密码,则希望与该用户绑定,通常情况下,只允许该用户(和管理员帐户)读取(和写入)该用户密码。 因此,您还希望像以前一样继续操作,但随后添加一个呼叫以更新用户的密码属性。 有关解决方案和更深入的知识, 请访问http://www.letu.edu/people/markroedel/netcccu/activedirectorypasswordchanges.htm

还可以使用ldap_modify或ldap_mod_replace来更新除密码以外的其他用户数据。

使用ldap_modify来更新ldap条目。 这很简单:

$entry['mail'] = 'example@domain.com';
$entry['cn'] = 'test';
ldap_modify($connection, $dn, $entry);

userPassword操作属性。

服务器内部使用操作属性。 通常,它是可读的,但不能被用户修改。

为了检索操作属性,您必须明确地要求它,或使用特殊属性+请求所有这些属性(就像使用*来请求所有用户属性一样)。

您还可以使用以下命令请求所有 (用户和操作)属性:

ldap_search($connection, $base_dn, $filter, ['*', '+']);

现在,您想将提交的用户密码与存储在AD中的密码哈希字符串进行比较。 这意味着您需要根据AD所使用的哈希方案(例如: {SSHA}, {SHA}, {SMD5}, {MD5}, {CRYPT}, ... )手动对提交的字符串进行加密/哈希/加盐{SSHA}, {SHA}, {SMD5}, {MD5}, {CRYPT}, ...比较是可行的。

这是一个如何基于明文密码手动生成{MD5}哈希的示例:

$hash = '{md5}' . base64_encode(pack('H*', md5($clear_txt_passwd)));

=>这并不简单,即使输入字符串正确也不保证匹配,因为您可能会在ldap实现和/或系统/ OS之间遇到互操作性问题(哈希/盐函数可能彼此不同,尤其是使用crypt库时)这取决于系统)。

如果要直接针对AD测试用户身份验证,只需使用ldap_bind

$bind = ldap_bind($connection, $dn, $passwd); // returns TRUE on success, FALSE on failure.
echo "$dn\n" . ($bind ? 'LDAP bind OK' : 'LDAP bind failed');

但是,例如,如果要同时针对现有的openLdap服务器和AD检查用户凭据,则需要不断同步/复制用户条目,而最好保留一个身份验证后端。 在这种情况下,您将必须在第一个后端(此示例中为openLDAP)使用专用的{SASL}方案使用直通身份验证 :通过此配置,Cyrus SASL用作密码处理程序, 并将密码验证委派给任何后端具有SASL的最终服务器支持检查密码(在您的情况下为AD,但可以是Kerberos或IMAP服务器)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM