我有一个Web应用程序(PHP,但没关系)。它使用LDAP进行身份验证(已经工作),并允许用户搜索LDAP(已经工作)。
但是在搜索时,我使用通用进程帐户绑定()然后运行搜索()。
我想要的是使用登录的LDAP帐户与绑定搜索的帐户相同。但我认为这样做的唯一方法是将用户的凭据存储在会话中(不好!)。
Nutshell:我可以获得“州/会议/ ??”来自LDAP的令牌,绑定()然后在后续的http请求上搜索()?
(顺便说一下,使用Active Directory。)
答案 0 :(得分:6)
基本LDAP不提供这样的内容。绑定时提供的凭据用于连接的其余部分,因此,如果您可以跨多个HTTP请求保持LDAP连接打开(并在您运行的许多服务器作业之间共享LDAP连接),那么您可以避免保存凭据
LDAP有各种各样的扩展(包括Active Directory中的几个),所以其中一个可能会在连接中添加会话,但如果是这样,我就不知道了。
作为一种解决方法,因为Active Directory支持GSSAPI,并且由于Kerberos的工作方式,您应该能够使用用户的凭据来请求访问LDAP的Kerberos票证,然后将该票证存储为“状态/会议/ ??”令牌。此Kerberos票证仅对访问LDAP有效并且会自动过期,因此这可以避免在会话中存储用户凭据的缺陷。我不知道您的LDAP库是否支持GSSAPI,并且会给您足够的控制权来执行此操作。