2011-12-14 4 views
7

Я пытаюсь, чтобы мое пользовательское Java-приложение использовало наш Active Directory Server для аутентификации, но я не могу заставить его работать по какой-то причине. Кто-нибудь может понять, почему это так? Вот мой метод ниже:Ошибка проверки подлинности ldap Java

private boolean authenticate(String serverName, String userId, String password) throws NamingException { 
    DirContext ctx = null; 
    Hashtable env = new Hashtable(11); 
    boolean b = false; 
    try { 
     env.put(Context.INITIAL_CONTEXT_FACTORY, 
     "com.sun.jndi.ldap.LdapCtxFactory"); 
     env.put(Context.PROVIDER_URL, "ldap://servername.org:389"); 
     env.put(Context.SECURITY_AUTHENTICATION, "simple"); 
     env.put(Context.SECURITY_PRINCIPAL, "uid="+ userId +",ou=All Users,dc=site,dc=org"); 
     env.put(Context.SECURITY_CREDENTIALS, password); 
     System.out.println("before context"); 
     // If there isn't a naming exception then the user is authenticated. Return true 
     ctx = new InitialDirContext(env); 
     //The user is authenticated. 
     b = true; 
    } catch (NamingException e) { 
     System.out.println("the user is not authenticated return false"); 
     b = false; 
    }finally{ 
     if(ctx != null) 
      ctx.close(); 
    } 
    return b; 
} 

Результат:

[12/14/11 16:27:47:746 CST] 0000001f SystemErr  R 
javax.naming.AuthenticationException: [LDAP: error code 49 - 80090308: LdapErr: DSID-0C090334, comment: AcceptSecurityContext error, data 52e, vece 
+1

, что происходит? можете ли вы опубликовать трассировку стека? –

+0

Я получаю код ошибки ldap 49, который является ошибкой аутентификации. Однако учетные данные, которые я поставляю, верны. Я могу подключиться к своей машине Windows и другим серверам. – bschupbach

+0

Ваш ldap требует шифрования? используете ли вы какие-либо конкретные параметры подключения, которые могут оказаться важными для обмена? В противном случае это просто догадки. – hovanessyan

ответ

4

Вы пробовали этот путь?

//... 
env.put(Context.SECURITY_PRINCIPAL, "cn="+ userId +",ou=All Users,dc=site,dc=org"); 
//... 

Также замените

Hashtable env = new Hashtable(11); 

с

Hashtable env = new Hashtable(); 
+1

Спасибо! Это сделало трюк ... Я знал, что это должно быть что-то простое. – bschupbach

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