如何在LDAP中使用DN和密码在Java中绑定?

时间:2012-06-15 06:28:23

标签: java ldap bind

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

4 个答案:

答案 0 :(得分:5)

以下是我从official documentation获取的示例:

// 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);

您必须选择正确的身份验证模型。我以前尝试过并且工作正常。

答案 1 :(得分:2)

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

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

  2. 在最初获得的reconnect()上,在环境中没有任何安全信息的情况下调用LdapContext,或者使用与其他主体相关的安全信息,但其环境随后被修改。

答案 2 :(得分:1)

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

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

答案 3 :(得分:0)

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

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,这很有用。)