PHP LDAP会话持久性

PHP LDAP会话持久性,php,ldap,Php,Ldap,我正在用PHP开发一个网站,该网站具有简单的用户身份验证和带有LDAP的CRUD。 我在广告中设置了规则,指定哪些组可以或不能编辑其他组,哪些属性可以编辑用户 问题是,在成功地将用户绑定到广告并重定向到另一个页面后,先前绑定的会话就消失了 仅在身份验证之后和重定向之前,函数将返回用户的DN。但是,在重定向之后,它什么也不返回 我提到“PHPLDAP不支持持久连接”,这是我能找到的关于这方面的唯一信息 我需要为用户CRUD保留用户会话 例如,如果用户想要编辑其密码或名字,则肯定会返回“Insuff

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

问题是,在成功地将用户绑定到广告并重定向到另一个页面后,先前绑定的会话就消失了

仅在身份验证之后和重定向之前,函数将返回用户的DN。但是,在重定向之后,它什么也不返回

我提到“PHPLDAP不支持持久连接”,这是我能找到的关于这方面的唯一信息

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

例如,如果用户想要编辑其密码或名字,则肯定会返回“Insufficient access”,因为如果没有正确的会话,ldap可能会尝试匿名绑定

由于这种行为,我不能创建简单的用户CRUD,这正常吗

目前,我看到两个解决方案并不是真正安全友好的

  • 第一种方法是存储用户身份验证信息并在每个页面上绑定

  • 第二种方法是在每次更新时以管理员身份登录。 出于安全原因,这也是错误的,它绕过了所有关于用户版本的广告配置

我应该和这种行为一起工作吗?也许我应该去图书馆什么的? 我有点迷路了,我所有的“解决方案”都不是很好,所以如果有人有任何提示或想法,我会很乐意接受


谢谢。

问题不在于LDAP,而在于HTTP

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

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

不同之处在于,在mysql中,每个用户都使用自己的凭证来操作mysql数据库的概念没有被使用,您通常会设置一个数据库用户作为执行操作的用户

在LDAP中,您希望更改此行为,因为它不安全,但是。。。一直都是这样

因此,就像在MySQL中一样(例如),当您需要连接到LDAP服务器时,必须使用类似于singleton的东西,它在每个PHP脚本的开头启动LDAP连接。要做到这一点,正如您所说,您有两种解决方案:

  • 存储用户凭据并使用它们打开每个页面上的连接
  • 使用技术帐户提出请求
不同之处在于,在LDAP实现中,有一种机制允许技术帐户充当用户。并充当用户,这意味着修改将归于用户(例如,将由用户创建的条目的
createdBy
操作属性中引用的用户)

查看本文档,了解如何实施该行为:

(第15.3节SASL代理授权)


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

问题不在于LDAP,而在于HTTP

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

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

不同之处在于,在mysql中,每个用户都使用自己的凭证来操作mysql数据库的概念没有被使用,您通常会设置一个数据库用户作为执行操作的用户

在LDAP中,您希望更改此行为,因为它不安全,但是。。。一直都是这样

因此,就像在MySQL中一样(例如),当您需要连接到LDAP服务器时,必须使用类似于singleton的东西,它在每个PHP脚本的开头启动LDAP连接。要做到这一点,正如您所说,您有两种解决方案:

  • 存储用户凭据并使用它们打开每个页面上的连接
  • 使用技术帐户提出请求
不同之处在于,在LDAP实现中,有一种机制允许技术帐户充当用户。并充当用户,这意味着修改将归于用户(例如,将由用户创建的条目的
createdBy
操作属性中引用的用户)

查看本文档,了解如何实施该行为:

(第15.3节SASL代理授权)


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

哇,这是很多有用的信息,谢谢!你的解决方案真的很有趣,我将开始深入研究文档,看看我能用SASL做些什么。我将返回结果。或者使用编程语言/运行时环境,您可以使用用户拥有的持久LDAP连接实现多线程服务。哇,这是很多有用的信息,谢谢!你的解决方案真的很有趣,我将开始深入研究文档,看看我能用SASL做些什么。我将返回结果。或者使用编程语言/运行时环境,通过该环境,您可以使用用户拥有的持久LDAP连接实现多线程服务。