2010-07-01 136 views
4

的彷彿回到比賽如果用戶只需在活動目錄中存在:Java的LDAP密碼認證

NamingEnumeration<SearchResult> ne = dirContext.search(
         baseDN, 
         userObjectQuery, 
         new String[] { userName }, 
         SearchControls) 

的userObjectQuery就像userObjectQuery=(&(sAMAccountName=%u)(objectclass=user))

%u以上將由用戶名取代。

如何確保用戶密碼也匹配,然後才返回true?

回答

4

一旦你找到使用你的搜索代碼的用戶,你可以用getNameInNamespace()

得到了用戶的充分DN然後你就可以作爲完整DN和密碼綁定進行身份驗證。

+0

是否無法驗證用戶的密碼而無需綁定?例如,我們希望讓具有綁定功能的用戶作爲特殊組來驗證其他權限較低的用戶。 – JavaRookie 2010-07-02 07:31:31

+0

我有一個用戶密碼的副本,只是想確保它與AD服務器上的密碼相匹配。所以用我的用戶名我想要購買AD密碼,然後將其與本地所擁有的相匹配。可以用dirContextSearch來完成,還是有其他的調用? – JavaRookie 2010-07-02 10:22:48

+3

這將是一個非常糟糕的設計LDAP服務器,讓您「獲取」用戶的密碼。任何可以綁定的人都可以獲取所有密碼。許多LDAP實現對密碼進行單向散列,因此它們甚至不保留它。綁定是我知道進行身份驗證的唯一方法。 – karoberts 2010-07-02 16:43:34