【发布时间】:2016-08-26 04:06:43
【问题描述】:
我有:
- Linux 服务器上的 PHP 应用程序
- 一个(windows server 2012)域控制器
我想让 AD 用户能够登录 PHP 应用程序。 PHP 应用程序会将数据关联到用户,所以我需要在我的数据库中创建用户。
在 PHP 应用程序中创建新用户时,管理员从 AD 用户的 userPrincipalName 列表中进行选择。选择 userPrincipalName 时,PHP 会获取该用户的 objectGUID 并将其存储在数据库中。事实上,由于 UPN 可能会改变,我不能依靠它来唯一地识别用户。另外,我希望如果 UPN 发生变化,用户可以使用他的新 UPN 无缝登录到 PHP 应用程序。
当用户想要登录我的应用程序时,PHP 会收到用户名和密码,并将它们传递给 ldap_bind 以检查凭据是否有效。那时的问题是 ldap bind 没有给出他实际识别的用户的任何线索(ldap_bind 具有验证登录名/密码的复杂逻辑 (https://msdn.microsoft.com/en-us/library/cc223499.aspx))。
如果 ldap 绑定返回 objectGUID,最原子(因此也是最可靠)的方法是......但它没有,我不会在 PHP 中编写 ldap 绑定的逻辑来查找哪个他实际识别的用户(如果 ldap 绑定和我的“手动”搜索之间的目录更改,由于竞争条件,无论如何都会有问题)
如果可能的话,我应该如何在对域控制器的单个请求中从 PHP 中验证和识别 LDAP 用户(以获得原子性)?
【问题讨论】:
标签: php authentication active-directory ldap