m_shige1979のときどきITブログ

プログラムの勉強をしながら学習したことや経験したことをぼそぼそと書いていきます

Github(変なおっさんの顔でるので気をつけてね)

https://github.com/mshige1979

LDAP認証を試してみたい

LDAP認証

LDAPとは、LDAP認証とは、LDAP認証 with Cisco ASAより抜粋

LDAP(Lightweight Directory Access Protocol)は、Active Directoryのようなディレクトリサービスにアクセスするためのプロトコル

なるほど

試用してみるLDAPサーバ

Downloads for Linux RPM Package — Apache Directory
※上記よりApacheDSと管理ツールのApache DS Studioをダウンロードしてインストールする

環境

ApacheDS

Vangrantの中のCentOS7

Apache Directory Studio

Mac

Apache DSのインストール

Javaのインストール
sudo rpm -ivh jdk-8u121-linux-x64.rp

Javaを使用しているらしいのでインストールが必要

ダウンロード
curl -o apacheds-2.0.0-M23-x86_64.rpm http://ftp.meisei-u.ac.jp/mirror/apache/dist//directory/apacheds/dist/2.0.0-M23/apacheds-2.0.0-M23-x86_64.rpm
インストール
sudo rpm -ivh apacheds-2.0.0-M23-x86_64.rpm
起動
sudo /etc/init.d/apacheds-2.0.0_M23-default start

管理ツール

Apache Directory Studioを起動

f:id:m_shige1979:20170128072509p:plain

新しくコネクションを作成

f:id:m_shige1979:20170128074633p:plain

接続情報を設定

f:id:m_shige1979:20170128074649p:plain

ホスト LDAPサーバのIP
ポート 10389
ユーザーとパスワードを設定

f:id:m_shige1979:20170128074832p:plain
※テスト情報

認証 simple
ユーザーID uid=admin,ou=system
パスワード secret
完了

f:id:m_shige1979:20170128075039p:plain

画面に表示

f:id:m_shige1979:20170128075151p:plain

Javaで接続

Sample01.java
import java.util.Hashtable;

import javax.naming.AuthenticationException;
import javax.naming.Context;
import javax.naming.directory.DirContext;
import javax.naming.directory.InitialDirContext;

public class Sample01 {

	public static void main(String[] args) {
		System.out.println(auth("uid=admin;ou=system", "secret"));
		System.out.println(auth("uid=admin;ou=system", "ddddddddd"));
	}
	
	public static boolean auth(String uid, String password) {
		boolean res = false;
		
		//LDAP接続情報
		Hashtable env = new Hashtable();
		env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
		env.put(Context.PROVIDER_URL, "ldap://192.168.33.10:10389/"); //LDAPサーバ
		env.put(Context.SECURITY_AUTHENTICATION, "simple");
		env.put(Context.SECURITY_PRINCIPAL, uid); //ID, 組織
		env.put(Context.SECURITY_CREDENTIALS, password); //パスワード
		 
		try {
		    DirContext ctx = new InitialDirContext(env);
		    ctx.close();
		    System.out.println("auth ok");
		    res = true;
		} catch (AuthenticationException ae) {
		   //認証エラー
		    System.out.println("auth ng");
		} catch (Exception e) {
		   //その他のエラー
		}
		
		return res;
	}

}

auth ok
true
auth ng
false

所感

基本、Active Directory Serviceとかよくわかっていないけどこれを機会に理解を深めていきたいと思う。
まあ、使わなかったらそれまでなんですけど…
SSLを使う方法も調べて見よう。