-
-
Save jbarber/2909828 to your computer and use it in GitHub Desktop.
| /* | |
| * First create the keystore (to allow SSL protection) by importing the LDAP | |
| * certificate (cert.pem) with: | |
| * keytool -import -keystore keystore -storepass changeit -noprompt -file cert.pem | |
| * | |
| * You can get the certificate with OpenSSL: | |
| * openssl s_client -connect ldap.server.com:636 </dev/null 2>/dev/null | sed -n '/^-----BEGIN/,/^-----END/ { p }' > cert.pem | |
| * | |
| * Then compile this class with: | |
| * javac LdapAuth.java | |
| * | |
| * Finally execute it with: | |
| * java -Djavax.net.ssl.trustStore=keystore -Djavax.net.ssl.keyStorePassword=changeit LdapAuth <username> <password> | |
| */ | |
| import java.util.*; | |
| import javax.naming.*; | |
| import java.util.regex.*; | |
| import javax.naming.directory.*; | |
| public class LdapAuth { | |
| private final static String ldapURI = "ldaps://ldap.server.com/dc=ldap,dc=server,dc=com"; | |
| private final static String contextFactory = "com.sun.jndi.ldap.LdapCtxFactory"; | |
| private static DirContext ldapContext () throws Exception { | |
| Hashtable<String,String> env = new Hashtable <String,String>(); | |
| return ldapContext(env); | |
| } | |
| private static DirContext ldapContext (Hashtable <String,String>env) throws Exception { | |
| env.put(Context.INITIAL_CONTEXT_FACTORY, contextFactory); | |
| env.put(Context.PROVIDER_URL, ldapURI); | |
| DirContext ctx = new InitialDirContext(env); | |
| return ctx; | |
| } | |
| private static String getUid (String user) throws Exception { | |
| DirContext ctx = ldapContext(); | |
| String filter = "(uid=" + user + ")"; | |
| SearchControls ctrl = new SearchControls(); | |
| ctrl.setSearchScope(SearchControls.SUBTREE_SCOPE); | |
| NamingEnumeration answer = ctx.search("", filter, ctrl); | |
| String dn; | |
| if (answer.hasMore()) { | |
| SearchResult result = (SearchResult) answer.next(); | |
| dn = result.getNameInNamespace(); | |
| } | |
| else { | |
| dn = null; | |
| } | |
| answer.close(); | |
| return dn; | |
| } | |
| private static boolean testBind (String dn, String password) throws Exception { | |
| Hashtable<String,String> env = new Hashtable <String,String>(); | |
| env.put(Context.SECURITY_AUTHENTICATION, "simple"); | |
| env.put(Context.SECURITY_PRINCIPAL, dn); | |
| env.put(Context.SECURITY_CREDENTIALS, password); | |
| try { | |
| ldapContext(env); | |
| } | |
| catch (javax.naming.AuthenticationException e) { | |
| return false; | |
| } | |
| return true; | |
| } | |
| public static void main(String args[]) throws Exception { | |
| if (args.length != 2) { | |
| System.out.println( "missing requried username and password" ); | |
| System.exit(1); | |
| } | |
| String user = args[0]; | |
| String password = args[1]; | |
| String dn = getUid( user ); | |
| if (dn != null) { | |
| /* Found user - test password */ | |
| if ( testBind( dn, password ) ) { | |
| System.out.println( "user '" + user + "' authentication succeeded" ); | |
| System.exit(0); | |
| } | |
| else { | |
| System.out.println( "user '" + user + "' authentication failed" ); | |
| System.exit(1); | |
| } | |
| } | |
| else { | |
| System.out.println( "user '" + user + "' not found" ); | |
| System.exit(1); | |
| } | |
| } | |
| } |
Thank you for sharing this. Helped me a lot.
It did not worked as is for us. I assume first we are trying for a search anonymously, which is not allowed in our environment. avoiding the anonymous search worked for us. I shall paste the modified code if you want.
THANKS A LOT!!!
Thanks for the write up but as @surighanta pointed that anonymous search was not allowed in their environment, I too faced such an issue.
Can you help me in getting what all authentication protocols is supported by the server to which i am trying to bind. Is there a programmatic way to find that so that i can query the user for the appropriate additional information.
Thanks,
-Navneet
Hello i want to store a user in ldap i use bind method but when i search the user in ldap i found it but serialisable ,
It worked great! Thanks for sharing!
Brilliant!
Thanks for sharing.. This helped me.