Какой домен я должен указать в JNDI-входе на сервер Active Directory?

Мне интересно, какой «принципал» я должен указать для входа на сервер Active Directory. Должен ли принципал быть пользователем внутри AD, в который я пытаюсь войти? Или это может быть пользователь в указанном мной домене, если у пользователя есть права доступа к AD?

Я попробовал оба варианта с ошибкой учетных данных 49. Но я могу войти в AD с помощью ldp.exe, используя учетную запись администратора сервера, на котором установлен AD.

Вот мой код. Большое спасибо за оперативную помощь.

Hashtable env= new Hashtable(11);
env.put(Context.SECURITY_AUTHENTICATION,"simple"); // Also tried none w/ the same error

// What principal should I use??
env.put(Context.SECURITY_PRINCIPAL,"CN=Ross,OU=Eng,DC=RossInc");//User
//env.put(Context.SECURITY_PRINCIPAL, user + "@" + domain); // Tried w/ the same error

env.put(Context.SECURITY_CREDENTIALS, "ross");//Password
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL,"ldap://myserver:389/DC=RossInc");

DirContext ctx = new InitialDirContext(env); <-- Fails with AuthenticationException: [LDAP: error code 49 - 8009030C

person Ross Isapansy    schedule 09.11.2011    source источник


Ответы (2)


Вы также можете предоставить:

  • Имя входа в стиле NT
  • Kerberos UPN (неявное UPN)
  • явное UPN (если были определены дополнительные UPN)

Более того, НИКОГДА не выполняйте простую привязку! Либо Дайджест, либо GSS-API.

person Michael-O    schedule 17.11.2011
comment
Еще раз, пожалуйста, на правильном английском. - person Michael-O; 18.11.2011

Согласно следующему примеру с сайта Oracle, участник безопасности - это отличительное имя.

Вот код, работающий для меня с компьютера внутри домена:

Hashtable<String, String> ldapEnv = new Hashtable<String, String>(11);
ldapEnv.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
ldapEnv.put(Context.PROVIDER_URL,  "ldap://societe.fr:389");
ldapEnv.put(Context.SECURITY_AUTHENTICATION, "simple");
ldapEnv.put(Context.SECURITY_PRINCIPAL, "cn=administrateur,cn=users,dc=societe,dc=fr");
ldapEnv.put(Context.SECURITY_CREDENTIALS, "test.2011");
ldapContext = new InitialDirContext(ldapEnv);

Принципал может быть пользователем внутри AD, если у него есть права доступа к AD.

person JPBlanc    schedule 09.11.2011
comment
Настроил принципала в AD и в коде. Затем я использовал его для входа, но все равно получил ту же ошибку! - person Ross Isapansy; 09.11.2011
comment
Пример действителен только для служб каталогов. - person Michael-O; 17.11.2011