2

我想从 LDAP 中搜索一个用户,并在获得想要连接(验证)该特定用户的用户后,使用他的 DN 和密码我已成功获取 DN 但不知道如何绑定它?

4

4 回答 4

4

这是我从官方文档中获取的示例:

// Set up the environment for creating the initial context
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY, 
    "com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, "ldap://localhost:389/o=JNDITutorial");

// Authenticate as S. User and password "mysecret"
env.put(Context.SECURITY_AUTHENTICATION, "simple");
env.put(Context.SECURITY_PRINCIPAL, "cn=S. User, ou=NewHires, o=JNDITutorial");
env.put(Context.SECURITY_CREDENTIALS, "mysecret");
DirContext ctx = new InitialDirContext(env);

您必须选择正确的身份验证模型。我之前尝试过并且效果很好。

于 2012-06-15T07:27:07.837 回答
2

LDAP bind() 操作对应于 JNDI 中的以下内容:

  1. 在环境中构造一个InitialDirContextInitialLdapContext具有足够的信息以导致登录,即安全主体和凭据,或

  2. 调用最初获得reconnect()LdapContext环境中没有任何安全信息,或者具有与不同主体相关的安全信息,但其环境随后已被修改。

于 2012-06-15T11:54:21.343 回答
1

当使用 LDAP 与目录服务器建立连接时,连接状态是未经身份验证的。假设服务器管理员允许未经身份验证的请求,则可以在未经身份验证的连接上传输请求。BIND请求用于更改连接的身份验证状态。

下面是使用UnboundID LDAP SDK进行搜索和验证的示例:SimpleBindExample.java。此示例搜索给定基础对象、命名属性和用户名的条目,然后尝试使用simple bind. 使用 SASL 绑定的示例可以很容易地构建。

于 2012-06-15T10:06:33.830 回答
0

如果您已经使用您的凭据打开了LdapContext ,您可以复制它,在其环境中更改主体+凭据并尝试重新连接:

LdapContext userContext = ldapContext.newInstance(null); // copy context
userContext.addToEnvironment(InitialDirContext.SECURITY_PRINCIPAL, userDn);
userContext.addToEnvironment(InitialDirContext.SECURITY_CREDENTIALS, password);
userContext.reconnect(null); // throws NamingException if creds wrong
userContext.close();

如果它抛出 NamingException,则凭据是错误的。它是成功的,凭据是好的。;)

(如果您只有 LdapContext,但没有 InitialDirContext,这很有用。)

于 2016-08-03T15:28:28.150 回答