我无法使用LDAP验证用户。我有以下详细信息:
URL=ldap://10.10.10.10:389 LDAP BASE:DC=lab2,DC=ins LDAP Bind Account: CN=Ldap Bind,OU=Service Accounts,OU=TECH,DC=lab2,DC=ins LDAP Bind Account Pw: secret
我可以sAMAccountName使用上述详细信息搜索值,但是如何使用用户名和密码对用户进行身份验证? 如果你遵循我之前的问题,那么你将理解,我可以成功连接到LDAP服务器,但无法对其进行身份验证。 用户验证:
sAMAccountName
user: someusername password: somepwd
我无法使用来连接到LDAP服务器,'somepwd'应该如何使用someusername。我可以搜索给定的用户为sAMAccountName。
'somepwd'
someusername
如果你不想使用UnboundID SDK,它将为你提供正确的路径。这不是生产质量,如果你的商店支持,你可能希望在此处添加SSL内容。
public static Boolean validateLogin(String userName, String userPassword) { Hashtable<String, String> env = new Hashtable<String, String>(); env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory"); env.put(Context.PROVIDER_URL, "ldap://" + LDAP_SERVER + ":" + LDAP_SERVER_PORT + "/" + LDAP_BASE_DN); // To get rid of the PartialResultException when using Active Directory env.put(Context.REFERRAL, "follow"); // Needed for the Bind (User Authorized to Query the LDAP server) env.put(Context.SECURITY_AUTHENTICATION, "simple"); env.put(Context.SECURITY_PRINCIPAL, LDAP_BIND_DN); env.put(Context.SECURITY_CREDENTIALS, LDAP_BIND_PASSWORD); DirContext ctx; try { ctx = new InitialDirContext(env); } catch (NamingException e) { throw new RuntimeException(e); } NamingEnumeration<SearchResult> results = null; try { SearchControls controls = new SearchControls(); controls.setSearchScope(SearchControls.SUBTREE_SCOPE); // Search Entire Subtree controls.setCountLimit(1); //Sets the maximum number of entries to be returned as a result of the search controls.setTimeLimit(5000); // Sets the time limit of these SearchControls in milliseconds String searchString = "(&(objectCategory=user)(sAMAccountName=" + userName + "))"; results = ctx.search("", searchString, controls); if (results.hasMore()) { SearchResult result = (SearchResult) results.next(); Attributes attrs = result.getAttributes(); Attribute dnAttr = attrs.get("distinguishedName"); String dn = (String) dnAttr.get(); // User Exists, Validate the Password env.put(Context.SECURITY_PRINCIPAL, dn); env.put(Context.SECURITY_CREDENTIALS, userPassword); new InitialDirContext(env); // Exception will be thrown on Invalid case return true; } else return false; } catch (AuthenticationException e) { // Invalid Login return false; } catch (NameNotFoundException e) { // The base context was not found. return false; } catch (SizeLimitExceededException e) { throw new RuntimeException("LDAP Query Limit Exceeded, adjust the query to bring back less records", e); } catch (NamingException e) { throw new RuntimeException(e); } finally { if (results != null) { try { results.close(); } catch (Exception e) { /* Do Nothing */ } } if (ctx != null) { try { ctx.close(); } catch (Exception e) { /* Do Nothing */ } } } }