使用电子邮件和密码在LDAP中验证用户

时间:2013-11-25 07:36:45

标签: authentication ldap unboundid-ldap-sdk

我是LDAP API的新手。我能够连接到LDAP服务器并搜索用户。如何使用 UnboundID LDAP API

对使用电子邮件/密码的用户进行身份验证

我没有在LDAP中看到任何使用电子邮件和密码验证用户的身份验证?

是否可以使用电子邮件和密码验证用户

我正在做什么来验证用户,如下所示

  1. 在USERS目录下搜索并匹配电子邮件并查找他的DN

  2. 根据连接用户的DN和连接成功,在连接中验证用户或执行,然后用户未经过身份验证

  3. 是否有正确的方式来验证用户?

2 个答案:

答案 0 :(得分:1)

你必须做两个步骤。

  1. 使用管理登录,在该目录中搜索该用户。
  2. 使用该用户的DN和他提供的密码,尝试绑定。
  3. 如果其中一方未成功,则身份或密码不正确。

答案 1 :(得分:0)

使用UnboundID LDAP SDK,这段简单的代码搜索条目。如果一个条目具有已知的电子邮件地址,则使用该DN的BIND(密码必须来自其他地方)。没有任何反应(经过身份验证的是false)是否有更多的条目与搜索参数匹配,或者没有条目与搜索参数匹配。此代码假定baseObject是 dc = example,dc = com 子树搜索是必需的,并且带有电子邮件地址的属性具有别名 mail 。该代码还假设有一个 bindDN bindPassword ,它具有足够的访问权限来搜索具有该电子邮件地址的用户。它搜索的电子邮件地址假定为 babs.jensen@example.com

整个过程都忽略了例外情况。

String baseObject = "dc=example,dc=com";
String bindDN = "dn-with-permission-to-search";
String bindPassword = "password-of-dn-with-permission-to-search";

// Exceptions ignored.
LDAPConnection ldapConnection = 
  new LDAPConnection(hostname,port,bindDN,bindPassword);

String emailAddress = "babs.jensen@example.com";
String filterText = String.format("mail=%s",emailAddress);
SearchRequest searchRequest = new SearchRequest(baseObject,
  SearchScope.SUB,filterText,"1.1");
SearchResult searchResult = ldapConnection.search(searchRequest);

boolean authenticated = false;
if(searchResult.getEntryCount() == 1)
{
    // There is one entry with that email address
    SearchResultEntry entry = searchResult.getSearchEntries().get(0);

    // Create a BIND request to authenticate. The password has
    // has to come from someplace outside this code
    BindRequest bindRequest =
       new SimpleBindRequest(entry.getDN(),password);
    ldapConnection.bind(bindRequest);
    authenticated = true;
}
else if(searchResult.getEntryCount() > 1)
{
    // more than one entry matches the search parameters
}
else if(searchResult.getEntryCount() == 0)
{
    // no entries matched the search parameters
}