Java LDAP Authentication


Java LDAP Authentication

In this tutorial, we will see sample java program for LDAP authentication. Checking LDAP authentication requires two steps

  1. Check LDAP authentication against LDAP url, base directory and master password
  2. 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;
 }
}