我是LDAP API的新手。我能够连接到LDAP服务器并搜索用户。如何使用LDAP API对用户/密码进行身份验证?我在DirContext
上看不到任何验证方法
要验证用户我是否必须:
这是否意味着LDAP中的身份验证?
答案 0 :(得分:3)
当客户端连接到LDAP目录服务器时,连接授权状态将设置为anonymous
。 LDAP客户端使用BIND请求来更改连接的授权状态。每个BIND请求都将连接授权状态更改为anonymous
,并且每个成功的BIND请求都将连接的授权状态更改为与成功BIND请求关联的授权状态,即用户的授权状态。失败的BIND请求使连接处于anonymous
状态。
客户端构造BindRequest
(简单的BIND请求或SASL绑定请求的形式)传输到LDAP目录服务器并解释来自服务器的响应,包括可能伴随BIND响应的任何响应控件。 BIND响应中的结果代码为零表示LDAP目录服务器与凭据匹配,并且用户已通过身份验证。
如果已知用户的专有名称,则可以从专有名称构造BIND请求。如果不知道,LDAP客户端必须构造搜索请求,将其传输到服务器并解释响应。专有名称始终包含在成功的搜索响应中,该响应至少返回一个条目。然后使用搜索响应中返回的distinguished来构造上面的BIND请求。
在最简单的情况下:
// exception handling is not shown
final String dn = ....;
final byte[] password = ....;
final BindRequest bindRequest = new SimpleBindRequest(dn,password);
final LDAPConnection ldapConnection = new LDAPConnection(hostname,port);
final BindResult bindResult = ldapConnection.bind(bindRequest);
final ResultCode resultCode = bindResult.getResultCode();
if(resultCode.equals(ResultCode.SUCCESS))
{
// user is authenticated
}
ldapConnection.close();
如果您使用的是Java,则应使用UnboundID LDAP SDK(JNDI不应用于新代码)。
答案 1 :(得分:2)
您可以尝试JAAS。 JDK中有com.sun.security.auth.module.LdapLoginModule用于此目的。我试过了,效果很好。