我编写了一个应用程序,用户通过LDAP进行身份验证并登录。这非常有效,我只使用他们的凭据进行ldap_bind()
,如果确实如此,则对其进行身份验证 - 否则,请告诉他们吊索它。我可以将他们的用户名保存在会话变量中,这样我就知道他们是谁。
现在,应用程序的一部分要求用户搜索LDAP以查找其他用户。我已经使用jquery-autocomplete
和ldap_search()
来实现这一点,而且效果非常好 - 用户只需键入用户名,名字或姓氏,并建议所有可能的匹配。可爱:)
但是,企业IT甚至不允许匿名浏览网络中的目录,所以,现在,我将用户名和密码存储在$_SESSION
中,这样我每次都可以进行新的绑定调用自动完成脚本。我知道它相当安全,而且该工具只是内部的,但这感觉就像我不应该做的事情,如果它被“放到野外”肯定不会做。
我想要做的是在登录时创建对LDAP的绑定,然后以某种方式在整个会话中记住此身份验证,这样我们可以根据需要进行尽可能多的搜索,而无需重新验证每个时间。我无法访问服务器,因此我无法更改任何内容。我可以以某种方式在$_SESSION
中存储成功的绑定并重用它吗?
如果这不是相对简单的,那么是否有人就如何实施这一点提出任何其他建议?
答案 0 :(得分:1)
您无法序列化资源类型(这是ldap_connect()返回的内容)。
我们在类似情况下所做的是使用仅在LDAP树上具有搜索权限的特定LDAP帐户(以及特定类型的数据,如姓名,姓氏,电子邮件),而不是其他任何内容。此用户的帐户凭据存储在数据库中。
也许要应用第二级安全性,您可以允许此用户仅从特定IP连接(我认为LDAP服务器支持此但我不是100%确定)。因此,即使凭据被泄露,它们也几乎无用
答案 1 :(得分:0)
因此,一旦对连接进行了身份验证,并且在处理成功的BIND请求之前,连接将保留其身份验证状态。这意味着连接可以保持打开状态,并且在连接上传输操作,直到服务器或客户端关闭连接。
请注意,符合LDAP的服务器可以选择发送未经请求的通知,该通知不是对客户端请求的响应。现代的专业级服务器将使用此机制通知客户端服务器因任何原因正在关闭连接。
简而言之,保持连接并继续使用它。更好的是,建立与服务器的连接的身份验证池。
更新
与LDAP兼容服务器的连接可以保持打开状态,并且可以用于客户端期望的许多事务(请求 - 响应对)(并且服务器允许)。 LDAP允许每个连接多个事务,并允许异步连接。