Active directory 如何在用户身份验证后保留LDAP绑定用户连接?

Active directory 如何在用户身份验证后保留LDAP绑定用户连接?,active-directory,ldap,unboundid-ldap-sdk,Active Directory,Ldap,Unboundid Ldap Sdk,我已经开始使用unbounded来实现针对LDAP的身份验证。 我实现了如下身份验证: 连接到LDAP ldapConnection = new LDAPConnection(host, port, bindUserDN, bindUserPassword); 搜索用户DN: Filter.create("(sAMAccountName=" + userName + ")"); SearchRequest searchRequest = new SearchRequest(baseDN, Se

我已经开始使用unbounded来实现针对LDAP的身份验证。 我实现了如下身份验证:

连接到LDAP

ldapConnection = new LDAPConnection(host, port, bindUserDN, bindUserPassword);
搜索用户DN:

Filter.create("(sAMAccountName=" + userName + ")");
SearchRequest searchRequest =
new SearchRequest(baseDN, SearchScope.SUB, 
        DereferencePolicy.NEVER, 0, 0, false, filter,
        attributesToReturn);
SearchResult searchResult = ldapConnection.search(searchRequest);`
绑定用户

SimpleBindRequest bindRequest = new SimpleBindRequest(searchResultEntry.getDN(), userPassword);
BindResult bindResult = ldapConnection.bind(bindRequest); 
不幸的是,在上次使用用户DN和用户密码进行绑定后,
ldapConnection
将更改为用户DN(而不是绑定用户DN)。我使用
ldapConnection.getLastBindRequest()
检查了它。 因此,我不能将其用于父条目检索(例如组检索),因为用户没有适当的权限

ldapConnection
更改用户是预期行为吗? 如何在用户身份验证后保留LDAP绑定用户连接?
我应该在任何LDAP操作之前(或至少在身份验证之后)使用bindUserDN重新连接吗?

当您绑定为新用户时,您应该绑定为该用户


我不知道你还能期待什么。

当你作为一个新用户绑定时,你会被绑定为那个用户


我不知道您还能期望什么。

LDAP客户端使用绑定请求更改连接的身份验证状态。当收到绑定请求时,符合LDAP的服务器必须立即将连接的授权状态设置为“unauthenticated”。如果请求成功,服务器将连接的授权状态设置为绑定请求中与可分辨名称关联的状态

另见

LDAP客户端使用绑定请求更改连接的身份验证状态。当收到绑定请求时,符合LDAP的服务器必须立即将连接的授权状态设置为“unauthenticated”。如果请求成功,服务器将连接的授权状态设置为绑定请求中与可分辨名称关联的状态

另见

更改连接的标识是LDAP绑定操作的主要影响之一。尽管有些服务器可能提供了一种通过连接验证用户身份的方法,而无需更改该连接的标识(例如,unbounded Directory Server提供了对可实现此目的的特殊控件的支持),但我不相信Active Directory提供了类似的功能

如果您使用的服务器不提供任何绑定机制而不更改连接的标识,那么您实际上只有两个选项可以防止绑定永久更改连接的标识:

  • 为绑定使用单独的连接,这样它就不会影响要继续用于其他目的的连接

  • 在执行绑定以验证用户凭据之后,执行第二次绑定以将连接的标识更改回第一次绑定之前的状态

许多代表最终用户与LDAP目录服务器交互的应用程序使用连接池,连接池中的连接可由多个用户重复使用,而不是为处理每个用户创建单独的连接。如果您在应用程序中使用连接池,那么Unbounded LDAP SDK for Java确实提供了一些功能来帮助您消除执行绑定对连接标识的影响。LDAPConnectionPool.bindAndRevertAuthentication方法允许您执行绑定以验证用户的凭据,然后它将自动作为该连接的原始用户重新绑定。类似地,如果已从池中签出连接,则可以使用LDAPConnectionPool.release和authenticateConnection方法将连接返回池,并将其自动重新绑定为原始用户


如果您不使用连接池,而是希望使用单个连接,那么我只建议在第一个连接后执行第二个绑定,以将身份验证状态恢复到以前的身份。

更改连接的身份是LDAP绑定操作的主要效果之一。尽管有些服务器可能提供了一种通过连接验证用户身份的方法,而无需更改该连接的标识(例如,unbounded Directory Server提供了对可实现此目的的特殊控件的支持),但我不相信Active Directory提供了类似的功能

如果您使用的服务器不提供任何绑定机制而不更改连接的标识,那么您实际上只有两个选项可以防止绑定永久更改连接的标识:

  • 为绑定使用单独的连接,这样它就不会影响要继续用于其他目的的连接

  • 在执行绑定以验证用户凭据之后,执行第二次绑定以将连接的标识更改回第一次绑定之前的状态

许多代表最终用户与LDAP目录服务器交互的应用程序使用连接池,连接池中的连接可由多个用户重复使用,而不是为处理每个用户创建单独的连接。如果您在应用程序中使用连接池,那么Unbounded LDAP SDK for Java确实提供了一些功能来帮助您消除执行绑定对连接标识的影响。LDAPConnectionPool.bindAndRevertAuthentication方法允许您执行绑定以验证用户的凭据,然后它将自动作为该连接的原始用户重新绑定。类似地,如果已从池中签出连接,则可以使用LDAPConnectionPool.release和authenticateConnection方法将连接返回池,并将其自动重新绑定为原始用户

如果你不是