2017-11-30 26 views
2

LDAPユーザーの特定のユーザーとパスワードが正しいかどうかをテストします。JNDIによるLDAP認証

jndiが使用するライブラリであることを整理しました。

私はこの単純なクラスが見つかりました:私はそれは私がパラメータで遊んでいます動作するようにしようとしていますので、

package myldap; 

import java.util.Hashtable; 
import javax.naming.AuthenticationException; 
import javax.naming.Context; 
import javax.naming.NamingEnumeration; 
import javax.naming.NamingException; 
import javax.naming.directory.Attributes; 
import javax.naming.directory.DirContext; 
import javax.naming.directory.InitialDirContext; 
import javax.naming.directory.SearchControls; 
import javax.naming.directory.SearchResult; 


// boolean function to test user and pwd 
public static boolean userVerify(String user, String password){ 
boolean userVerify = false; 
Hashtable env = new Hashtable(); 
env.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory"); 
env.put(Context.PROVIDER_URL, "ldap://192.168.48.10"); 
env.put(Context.SECURITY_AUTHENTICATION, "simple"); 
env.put(Context.SECURITY_PRINCIPAL, "CN=" + user + ",conn"); 
env.put(Context.SECURITY_CREDENTIALS, password); 

try { 
DirContext authContext = new InitialDirContext(env); 
userVerify = true; 
authContext.close(); 
} catch (AuthenticationException authEx) { 
//("Authentication Exception!"); 
userVerify = false; 
} catch (NamingException namEx) { 
//("Something went wrong!"); 
userVerify = false; 
} 
return userVerify; 
} 

を。私は、関数に入れ 値iはAuthenticationExceptionを得る上記と

INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory"); 
PROVIDER_URL, "ldap://192.168.48.10"); 
SECURITY_AUTHENTICATION, "simple"); 
SECURITY_PRINCIPAL, "CN=" + user + ",conn"); 
SECURITY_CREDENTIALS, password); 

あり、それは私が解決策にはあまり近くだと思われるので、私は、私はNamingException取得物事を変更することで、達成できる最高の結果です。

特に私はSECURITY_PRINCIPALについてはわかりません。

経験を積んだ人は誰ですか?どの人が間違っているのかを正確に突き止める方法についてアドバイスできますか?もちろん、接続して例外を発生させたくないです。

答えて

1

SECURITY_PRINCIPALは、認証するユーザーのDN全体である必要があります。

通常、電子メールアドレスなどのユーザー固有の属性を使用して、DITの以前の検索を実行する必要があります。通常、DITに組み込まれている他の管理ユーザーとして認証する必要があります。その検索を行う権利。次に、DNを見つけたら、SECURITY_PRINCIPALを変更して再接続します。

+0

返信いただきありがとうございます。 SECURITY_PRINCIPALは "CN = john、OU = ACMEユーザー、OU = OU ACME内部、DC = ACME、DC = acmesystems、DC = com"のようになりますか? "john @ acme"のようなユーザー名だけを渡す必要がある場合、どうすればいいですか? – LaBracca

+0

私はそれに答えていると信じています。どのようなLDAPサーバーを使用していますか? – EJP