PHP LDAP 会话持久性

PHP LDAP session Persistence

我正在 PHP 中的一个网站上工作,该网站具有简单的用户身份验证和 LDAP 的 CRUD。 我在我的广告中设置了规则来指定哪些组可以或不能编辑其他组以及哪些属性可以编辑用户。

问题是,成功将用户绑定到AD后重定向到另一个页面,之前绑定的session没有了。

只要在身份验证之后和重定向之前,函数 ldap_exop_whoami() return 就是用户的 DN。但是,在重定向之后,它 return 什么都没有。

我在 another post 上看到“PHP LDAP 不支持持久连接。”,这只是 我能够找到的关于此的信息。

我需要为用户 CRUD 保留用户会话。

例如,如果用户想要编辑其密码或名字,ldap_mod_replace() 将 return“访问权限不足”,因为没有正确的会话,ldap 可能已经尝试了匿名绑定。

由于这种行为,我无法创建简单的用户 CRUD 是否正常?

目前,我看到了 2 个不太安全的解决方案。

我应该处理这种行为吗?也许我应该使用图书馆或其他东西? 我有点迷茫,我所有的 "solutions" 都不是很好,所以如果有人有提示或想法,我会很乐意接受。

谢谢。

问题不是关于 LDAP,问题是关于 HTTP。

HTTP 是无状态协议,而 LDAP 是有状态协议。

当您发出 HTTP 请求时,您的 PHP 脚本会在发送响应时执行并终止,这会破坏脚本中创建的内容(与关闭 mysql 连接的方式相同当 PHP 脚本终止时)。

不同的是mysql没有使用每个用户使用自己的凭据操作MySQL数据库的概念,一般设置一个数据库用户作为用户执行操作。

在 LDAP 中,您想要更改此行为,因为它不安全,但......它一直都是。

所以就像在 MySQL 中一样(例如),当您需要连接到LDAP 服务器。如您所说,要做到这一点,您有 2 个解决方案:

  • 存储用户凭据并使用它们在每个页面上打开连接
  • 使用技术帐户提出请求

不同之处在于,在 LDAP 实现中,有一种机制可以让技术帐户充当用户。并作为用户,意味着修改将记入用户(例如,用户将在用户将创建的条目的 createdBy 操作属性中引用该用户)

查看此文档以了解如何实现该行为:

http://php.net/manual/en/function.ldap-sasl-bind.php

https://www.openldap.org/doc/admin24/sasl.html(第 15.3. SASL Proxy Authorization 节)

注意:您需要检查您使用的 LDAP 实现,以查看是否支持此机制。