Java LDAP Authentication
In this tutorial, we will see sample java program for LDAP authentication. Checking LDAP authentication requires two steps
- Check LDAP authentication against LDAP url, base directory and master password
- Check User Authentication against directory and user password on the LDAPDirectory context
package com.javasavvy.ldapintegration;
import java.util.Hashtable;
import javax.naming.AuthenticationException;
import javax.naming.Context;
import javax.naming.NamingEnumeration;
import javax.naming.NamingException;
import javax.naming.directory.DirContext;
import javax.naming.directory.InitialDirContext;
import javax.naming.directory.SearchControls;
import javax.naming.directory.SearchResult;
import javax.naming.ldap.InitialLdapContext;
import javax.naming.ldap.LdapContext;
public class JavaLDAPIntegration {
public boolean doLDAPAuth(String userName,String password){
boolean status =false;
String url = “ldap://localhost:389”; //LDAP URL
String principal =”cn=Directory Manager”; //LDAP Principal Directory
String base = “dc=javasavvy,dc=com”; //LDAP Base DN
String pwd = “test”; // LDAP Password
String filter = “(cn=”+userName+”)”;
String distName = null;
Hashtable<String, String> env = new Hashtable<String, String>();
env.put(Context.INITIAL_CONTEXT_FACTORY, “com.sun.jndi.ldap.LdapCtxFactory”);
env.put(Context.PROVIDER_URL, url);
env.put(Context.SECURITY_AUTHENTICATION, “simple”);
env.put(Context.SECURITY_PRINCIPAL, principal);
env.put(Context.SECURITY_CREDENTIALS,pwd);
// Create the initial context
SearchControls searchControls = new SearchControls();
searchControls.setSearchScope(SearchControls.SUBTREE_SCOPE);
LdapContext ctx = null;
DirContext authContext = null;
try {
ctx = new InitialLdapContext(env,null);
NamingEnumeration<SearchResult> enu = ctx.search(base,filter, searchControls);
if(enu.hasMoreElements()) {
SearchResult searchResult = (SearchResult) enu.nextElement();
if(searchResult!=null){
distName = searchResult.getNameInNamespace();
}
Hashtable<String, String> authProps = new Hashtable<String, String>();
authProps.put(Context.INITIAL_CONTEXT_FACTORY,”com.sun.jndi.ldap.LdapCtxFactory”);
authProps.put(Context.PROVIDER_URL, url);
authProps.put(Context.SECURITY_AUTHENTICATION, “simple”);
authProps.put(Context.SECURITY_PRINCIPAL, distName);
authProps.put(Context.SECURITY_CREDENTIALS, password);
try {
authContext = new InitialDirContext(authProps);
status = true;
} catch (AuthenticationException ex) {
//User Authentication fails here
status = false;
} catch (NamingException namEx) {
//User Authentication fails here
status = false;
}
}else{
// Failed to LDAP URL authentication saying User
//LOG.info(“Failed to LDAP URL authentication”);
}
} catch (NamingException e) {
e.printStackTrace();
}
if(ctx != null)
try {
ctx.close();
} catch (NamingException e) {
e.printStackTrace();
}
if(authContext!=null){
try {
authContext.close();
} catch (NamingException e) {
e.printStackTrace();
}
}
return status;
}
}