JavaでLDAP認証をやってみる

企業内システムとかでは、認証をLDAPを使ってやることがある。
でも、今までまったく扱ったことがなかった。
知ると認証は、ID/パスワードを使用して接続できれば認証OKとするのが
一般的みたいだ。
Javaでは、javax.namingパッケージを使うと簡単に接続ができるみたい。

import java.util.Hashtable;
import javax.naming.AuthenticationException;
import javax.naming.Context;
import javax.directory.DirContext;
import javax.directory.InitialDirContext;
 
 
//LDAP接続情報
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, "ldap://192.168.0.10:10389/"); //LDAPサーバ
env.put(Context.SECURITY_AUTHENTICATION, "simple");
env.put(Context.SECURITY_PRINCIPAL, "uid=admin;ou=system"); //ID, 組織
env.put(Context.SECURITY_CREDENTIALS, "secret"); //パスワード
 
try {
    DirContext ctx = InitialDirContext(env);
    //コンテキストのクローズ
    ctx.close();
} catch (AuthenticationException ae) {
   //認証エラー
} catch (Exception e) {
   //その他のエラー
}

リトライ処理を行う場合は、AuthenticationExceptionははっきりと認証が失敗したのが
明確なのでリトライを行う必要はないだろうから、Exceptionの場合だけでイイと思う。



ちなみに、LDAP認証をやるとなった場合、開発のテスト用にLDAPサーバが必要となる。
そんなときは、ApacheプロジェクトのApacheDSが便利である。

Apache Directory

http://directory.apache.org/


このプロジェクトでは、LDAPサーバのApacheDSの他に
管理ツールとなるEclipseベースのApache Direcotry Studioという2つのプロダクトがある。
しかも、インストールはインストーラに従って「はい」を押していけば簡単に出来てしまう。
そのApache DSの初期に設定されているadminユーザで認証する方法が上記サンプルと
なっている。(ID: admin / パスワード: secret)
これだけで簡単にLDAP認証が出来てしまうのだから便利である。