2013-11-25 139 views
0

我是LDAP API的新手。我能夠連接到LDAP服務器並搜索用戶。如何使用UnboundID LDAP API通過電子郵件/密碼驗證用戶?使用電子郵件和密碼在LDAP中驗證用戶

我還沒有看到任何使用電子郵件和密碼驗證用戶的LDAP身份驗證?

是否可以使用電子郵件和密碼來驗證用戶

我在做什麼,以給出如下

  1. 搜索用戶目錄下面和匹配的電子郵件和查找他的DN

    對用戶進行認證
  2. 基於DN連接用戶和如果連接成功,驗證用戶或Execption在連接時則用戶不被認證

有沒有正確的方法來驗證用戶?

回答

0

使用UnboundID LDAP SDK,這段簡單的代碼搜索條目。如果有一個條目具有已知的電子郵件地址,則使用該DN的BIND(密碼必須來自其他地方)。沒有任何事情發生(驗證是false)是否有更多條目與搜索參數匹配,或者沒有條目與搜索參數匹配。此代碼假設baseObject爲dc = example,dc = com,子樹需要搜索,並且該電子郵件地址的屬性具有別名郵件。該代碼還假定有一個bindDNbindPassword有足夠的訪問權限來搜索具有該電子郵件地址的用戶。它搜索的電子郵件地址假定爲[email protected]

例外在整個過程中都被忽略。

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 = "[email protected]"; 
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 
} 
1

你必須做兩個步驟。

  1. 使用管理登錄,搜索用戶的目錄。
  2. 使用該用戶的DN和他提供的密碼嘗試綁定。

如果兩者都不成功,則標識或密碼不正確。

相關問題