【问题标题】:How to know the objectGUID of a user that successfully authenticated with LDAP bind如何知道通过 LDAP 绑定成功验证的用户的 objectGUID
【发布时间】: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


    【解决方案1】:

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

    如果您担心潜在的竞争条件(这似乎是非常极端的情况,因为绑定和搜索之间的时间非常紧迫),您可以使用单独的 AD 服务帐户来搜索该帐户在绑定之前通过 UPN。然后在ldap_bind 中检查用户的凭据,您甚至可以使用您搜索的帐户中的 objectGuid 进行登录,因为这是 AD 绑定的有效“用户名”(即带有花括号的 GUID) .

    【讨论】:

    • 是的,这就是我最后所做的,第一步是通过 UPN 获取 GUID,然后绑定(这会强制用户输入 UPN,这比绑定允许的限制更多)。但是您使用 GUID 绑定的想法似乎比再次使用 UPN 更安全(我这样做了),所以谢谢!我知道这是边缘情况,但我想确保不会错过 LDAP API 中的某些内容,因为在我看来很明显许多应用程序都会遇到同样的问题。
    • 我会首先搜索具有给定“用户名”的用户以获取用户 DN,然后使用该用户名进行绑定。对于搜索,我将与具有搜索功能的已定义用户绑定。这也可以与其他 LDAP 后端一起使用,因为它不依赖于 AD 与 UPN 绑定的能力。在该搜索期间,您还可以检索 objectGUID,因此不应再存在竞争条件。额外的好处:根据使用的搜索过滤器,您还可以使用您的电子邮件地址或电话号码或任何您喜欢的登录;)
    • @heiglandreas 如果是为了支持更广泛的受众而开发的应用程序,我可能会同意。但是,如果它是一个内部开发的应用程序并且他们使用 AD,那么使用其他支持的用户名方法之一进行绑定就没有问题,特别是如果它更适合他们的用例。 DN 可以更改,objectGuid 不能。实际上,我认为 AD 支持的其他绑定格式比 OpenLDAP 之类的实现更有优势(我很惊讶没有模块或附加组件来允许这种行为)。
    • @ChadSikorra:DN 的变化并不重要,因为 objectGUID 仍用于连接到 DB 存储的用户。它仅用于针对 LDAP 而不是 UPN 的身份验证。最后,这是您在第二段中建议的(我似乎误读了),仅使用返回的 DN 进行绑定而不是 objectGUID。但是当您手头有 objectGUID 时,您可以使用它从数据库中检索用户。
    猜你喜欢
    • 2021-08-04
    • 2016-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-09
    • 2015-07-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多