2016-10-29 47 views
0

私はC#で書かれた簡単なアプリケーションを持っています。 このアプリケーションは、WindowsマシンとActive Directoryにログオンしたユーザーアカウントで動作します。ユーザ名とパスワードなしでJavaのLDAP Active Directoryに接続

このアプリケーションでは、LDAP Active Directoryから情報を取得します。 C#ので

私はそのようにLDAPとの接続を行います。

DirectoryEntry de = new DirectoryEntry("LDAP://OU=places,DC=system,DC=org"); 

、次の私は、(例えば)に必要なデータを取得する:

DirectorySearcher searcher = new DirectorySearcher(de); 
searcher.Filter = "(telephone=111222333)"; 
SearchResultCollection resultCollection = searcher.FindAll(); 

あなたがそのアプリケーションで見たよう、私は必要はありません。ユーザー名とパスワードでLDAPにログするが、正しいパスを入力する必要がある:

DirectoryEntryのコンストラクタは次のようになります。

もちろん
public DirectoryEntry(
    string path 
) 

そこにユーザー名とパスワードを使用してコンストラクタがあるが、私が言ったように私はそれを使用する必要はありません。

public DirectoryEntry(
    string path, 
    string username, 
    string password 
) 

私はJavaで同じ情報を取得しようとしましたが、私は同様のを使用コード:

Hashtable<String, String> env = new Hashtable<String, String>(); 

env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory"); 
env.put(Context.PROVIDER_URL, "ldap://ad.host:389"); 
env.put(Context.SECURITY_PRINCIPAL, "username"); 
env.put(Context.SECURITY_CREDENTIALS, "password"); 

DirContext ldap = new InitialDirContext(env); 

と私は(例えば)必要なデータを取得する次の:

SearchControls searchControls = new SearchControls(); 
searchControls.setSearchScope(SearchControls.SUBTREE_SCOPE); 
NamingEnumeration tel = ldap.search("OU=places,DC=system,DC=org", "(telephone=111222333)", searchControls); 

しかし、1つの違いがあります。ご覧のとおり、LDAP Active Directoryに接続するには、ユーザー名とパスワードをJavaに入れる必要があります。

私は、私は次のようなエラーが表示され、ユーザー名とパスワードを入れていない場合は、次の

Exception in thread "main" javax.naming.NamingException:[LDAP: error code 1 - 000004DC: LdapErr: DSID-0C0906E8, comment: In order to perform this operation a successful bind must be completed on the connection., data 0, v1db1;] remaining name 'OU=places,DC=system,DC=org' 

私は入れすることなく、Javaで同じマシンから同じLDAP Active Directoryにログインすることができれば私の質問ですユーザー名とパスワード?

C#のようにJavaでこれを行うのに相当するのは(ユーザー名とパスワードを入れないで)ですか?

+1

何示します。env.putについて(Context.SECURITY_AUTHENTICATION、「なし」)。 – maszter

+0

似たようなエラーがあります。 – zajjar

+0

'env.put(Context.SECURITY_AUTHENTICATION、" none ");を試したときに' SECURITY_PRINCIPAL'と 'SECURITY_CREDENTIALS'行を削除しましたか? –

答えて

2

env.put(Context.SECURITY_AUTHENTICATION, "none");を使用しても動作しない場合は、ご使​​用のAD環境が匿名認証をサポートしていない可能性があります。匿名認証は、デフォルトでは無効になっています。

new DirectoryEntry(...);をC#で使用すると、資格情報を使用していないように見えますが、実際にログオンしているユーザーの資格情報が実際に使用されているようです。それで、ADへの呼び出しを行うためにあなた自身の資格を借りています。

Javaはそれをしません。実際、私が今行ってきた簡単なグーグルでは、あなたがしたいことなら、それをするのはかなり難しいようです。

ここでそれを行う方法についての質問があります:そこQuery Active Directory in Java using a logged on user on windows

コメントを検討するカップルの製品を提供します。

しかし、複雑なサードパーティ製の製品を使用したくない場合は、ユーザー名とパスワードを入力するだけです。あなたがC#で匿名認証をテストしたい場合は

は、あなたはこのようなものを使用することができます。

new DirectoryEntry(ldapPath, null, null, AuthenticationTypes.Anonymous) 
+0

ありがとうございます。 – zajjar

関連する問題