Какой «домен» я должен указать при входе в систему JNDI на сервере Active Directory? - PullRequest
1 голос
/ 09 ноября 2011

Мне интересно, какого "принципала" мне следует указать для входа на сервер 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

Ответы [ 2 ]

0 голосов
/ 17 ноября 2011

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

  • логин в стиле NT
  • Kerberos UPN (скрытое UPN)
  • явное имя участника-пользователя (если определены дополнительные номера UPN)

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

0 голосов
/ 09 ноября 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.

...