AD認証のJavaプログラムを書く機会があったので、紹介。
import java.util.Hashtable;
import javax.naming.Context;
import javax.naming.NamingException;
import javax.naming.AuthenticationException;
import javax.naming.directory.InitialDirContext;
/**
* JNDI の LDAP インタフェースを用いて AD認証を実行
*
* 引数1:AD 接続先 URL
* 引数2:AD のドメイン名
* 引数3:ユーザID
* 引数4:パスワード
*/
public class adauth {
public static void main(String args[]) {
Hashtable env = new Hashtable();
// Contextファクトリ
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
// 接続先URL
env.put(Context.PROVIDER_URL,args[0]);
// セキュリティレベル
env.put(Context.SECURITY_AUTHENTICATION, "simple");
// ユーザID+ドメイン
env.put(Context.SECURITY_PRINCIPAL, args[2] + "@" + args[1]);
// パスワード
env.put(Context.SECURITY_CREDENTIALS, args[3]);
try {
// 認証チェック
InitialDirContext context = new InitialDirContext(env);
System.out.println("OK");
} catch (AuthenticationException ex) {
// 認証エラー
String msg = ex.getExplanation();
if ( msg.indexOf("AcceptSecurityContext") > 0 &&
msg.substring(msg.indexOf("AcceptSecurityContext")).indexOf("775") > 0 ) {
System.out.println("ユーザがロックアウト");
} else {
System.out.println("認証エラー");
}
} catch (NamingException ex ) {
// その他通信エラー等
ex.printStackTrace();
}
}
}
以下のコマンドで実験できます。
java adauth ldap://XXX.XXX.XXX.XXX:389/ mypcad.com myuserid "mypassword"
0 コメント:
コメントを投稿