2011-09-29 15 views
5

私はLDAPとシンプルなデータベース認証の両方を使用してユーザーをログインするアプリケーションを持っています。ユーザーがLDAPコンテキストに存在しない場合のみ、アプリケーションはデータベースに存在するかどうかを確認します。パスワードを知らなくても、ユーザーがLDAPに存在するかどうかを確認する方法が必要です。ユーザー名は一意であると言います。指定したユーザー名が存在するかどうかを確認するにはどうすればよいですか?

私はこのコードを使用します。これは正しいユーザー名とパスワードがあれば動作します。パスワードまたはユーザー名が間違っている場合は、例外が発生します。ユーザー名が存在しない場合は1つ、入力されたパスワードが間違っている場合は別の例外を得ることができれば理想的です。

String username = "test"; 
    String password = "pass"; 
    Hashtable<String, String> environment = new Hashtable<String, String>(); 
    environment.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory"); 
    environment.put(Context.PROVIDER_URL, "ldap://server.example.com:389"); 
    environment.put(Context.SECURITY_AUTHENTICATION, "simple"); 
    String user = username + "@example.com"; 
    environment.put(Context.SECURITY_PRINCIPAL, user); 
    environment.put(Context.SECURITY_CREDENTIALS, password); 
    try 
    { 
     DirContext context = new InitialDirContext(environment); 

     String searchBase = "DC=server,DC=example,DC=COM"; 
     String FILTER = "(&(objectClass=user)(objectCategory=person)((sAMAccountName=" + username + ")))"; 
     SearchControls ctls = new SearchControls(); 
     ctls.setSearchScope(SearchControls.SUBTREE_SCOPE); 
     NamingEnumeration<SearchResult> answer = context.search(searchBase, FILTER, ctls); 
     SearchResult result = answer.next(); 
     Attribute email = result.getAttributes().get("mail"); 
     Attribute cn = result.getAttributes().get("cn"); 
     System.out.println(cn + " : " + email); 
     context.close(); 
    } 
    catch (AuthenticationException a) 
    { 
     Logger.getLogger().info("Authentication failed: " + a.getExplanation()); 

    } 
    catch (NamingException e) 
    { 
     Logger.getLogger().info("Failed to bind to LDAP: " + e.getExplanation()); 
    } 

答えて

3

ユーザー名のみを使用してLDAPでユーザーを検索しています。しかし、LDAPに認証するには、検索したユーザー名とパスワードを使用しています。

認証には別の(管理者)ユーザーとパスワードを使用し、ユーザーの検索で何かが返された場合はtrueを返します。

+0

ありがとうございました。これは唯一の方法ですか?検索を行うためにはログインする必要がありますか? – radonys

+0

多分、私は知らない。私はあなたの*コードがLDAPに存在するかどうかをチェックするためにユーザのパスワードが必要な理由を説明しています。 –

+1

一部の管理者は匿名検索を許可します。ディレクトリ・サーバー管理者に確認してください。 –

関連する問題