繁体   English   中英

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

[英]How to bind in Java using DN and Password in LDAP?

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

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

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

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

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

  1. 在环境中InitialLdapContext具有足够信息的InitialDirContextInitialLdapContext以引起登录,即安全主体和凭证,或者

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

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

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

如果您已使用凭据打开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,那么这很有用。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM