繁体   English   中英

如何知道使用LDAP绑定成功进行身份验证的用户的objectGUID

[英]How to know the objectGUID of a user that successfully authenticated with LDAP bind

我有:

  • 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 bind返回了objectGUID ......但它没有,我不会在PHP中编写ldap bind的逻辑来查找他有哪个用户实际上已经确定了(如果目录在ldap bind和我的“手动”搜索之间发生变化,那么因为竞争条件会有错误)

那么,如果可能的话,我应该如何在对域控制器的单个请求中验证和识别来自PHP的LDAP用户(以获得原子性)?

在该过程的某个时刻,您需要具有逻辑,该逻辑搜索用于登录中的用户名的UPN,获取其objectGuid,并在数据库中搜索该objectGuid。 没有其他方法可以获得这些信息。

如果您担心潜在的竞争条件(这看起来非常边缘,考虑到绑定和搜索之间的时间非常紧张),您可以使用单独的AD服务帐户,通过UPN先前搜索帐户绑定。 然后在ldap_bind中检查用户的凭据,您甚至可以使用您搜索的帐户中的objectGuid进行登录,因为这是AD绑定的有效“用户名”(围绕它的大括号的GUID)。

暂无
暂无

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

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