2014-02-10 2 views
1

У меня есть веб-приложение, в котором я пытаюсь использовать аутентификацию LDAP для входа в систему (пользователи войти с их Windows, идентификатор сеанса)аутентификации LDAP с Java

Я попробовал этот класс:

public static boolean ad (String log,String pass) throws NamingException 
{ 
    try 
    { 
     System.out.println("Début du test Active Directory"); 

     Hashtable<String, String> ldapEnv = new Hashtable<String, String>(); 
     ldapEnv.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory"); 
     ldapEnv.put(Context.PROVIDER_URL, "ldap://LDAPserver:389"); 
     ldapEnv.put(Context.SECURITY_AUTHENTICATION, "DIGEST-MD5"); 
     ldapEnv.put("java.naming.security.sasl.realm","MyCompany.com"); 
     ldapEnv.put("javax.security.sasl.qop", "auth"); 
     ldapEnv.put("javax.security.sasl.strength","high"); 
     ldapEnv.put(Context.SECURITY_PRINCIPAL,log.toLowerCase()); 
     System.out.println(pass); 
     ldapEnv.put(Context.SECURITY_CREDENTIALS,pass);  
     ldapContext = new InitialDirContext(ldapEnv); 
     return true; 
    } 
    catch (Exception e) 
    { 
     return false; 
    } 
} 

Он работает для некоторых пользователей, но не для всех, и я не понимаю, почему.

+0

В какое исключение вы попадаете? – EJP

+0

@EJP это работает для некоторых пользователей для других, у меня есть это исключение: javax.naming.AuthenticationException: [LDAP: код ошибки 49 - 8009030C: LdapErr: DSID-0C0904DC, комментарий: AcceptSecurityContext error, data 52e, v1db1 –

+0

Ошибка: 52e "Возвращает, когда имя пользователя является допустимым, но пароль/учетные данные недействительны." -jim – jwilleke

ответ

1

Я сделал то же самое в своем проекте, это может быть полезно для вас.

package com.agileinfotech.bsviewer.ldap; 

import javax.naming.*; 
import javax.naming.directory.*; 
import java.util.Hashtable; 

public class LDAPLoginAuthentication { 

    public LDAPLoginAuthentication() { 
     // TODO Auto-generated constructor 
    } 

    public String authenticateUser(String username, String password) { 
     String strUrl = "success"; 

     System.out.print("username :" + username + " password" + password); 

     Hashtable env = new Hashtable(11); 
     boolean b = false; 
     String Securityprinciple = "cn=" + username + ",ou=users,o=agile-infotech,ou=system"; 
     env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory"); 
     env.put(Context.PROVIDER_URL, "ldap://localhost:10389"); 
     env.put(Context.SECURITY_AUTHENTICATION, "simple"); 
     env.put(Context.SECURITY_PRINCIPAL, Securityprinciple); 
     env.put(Context.SECURITY_CREDENTIALS, password); 

     try { 
      // Create initial context 
      DirContext ctx = new InitialDirContext(env); 
      // Close the context when we're done 
      b = true; 
      ctx.close(); 

     } catch (NamingException e) { 
      b = false; 
     } finally { 
      if (b) { 
       strUrl = "success"; 
      } else { 
       strUrl = "failure"; 
      } 
     } 

     return strUrl; 
    } 
} 
+0

он не работает для меня !! –

+0

какая ошибка вы получаете ..? –

+0

такая же 'ошибка: 52e' –

1

Мой ответ приходит очень поздно, но это может помочь некоторым пользователям в любом случае, так ...
Разработчик указано, что аутентификация работает для некоторых пользователей, а не другие. Таким образом, возможная ошибка здесь заключается в том, как генерируется md5: некоторые алгоритмы, используемые для хранения значения в числовом формате, что является проблемой, когда значение начинается с 0. Это связано с тем, что числовой формат (целое число и т. Д.) Удалит эти 0 из значения и аннулировать ваш MD5.

Смежные вопросы