Я пытаюсь аутентифицировать пользователя через LDAP в Active Directory. Ниже приведен фрагмент кода, который я использую:
private DirContext bindAsUser(String bindPrincipal, String password) {
Hashtable<String,String> env = new Hashtable<String,String>();
env.put(Context.SECURITY_AUTHENTICATION, "simple");
env.put(Context.SECURITY_PRINCIPAL, bindPrincipal);
env.put(Context.PROVIDER_URL, bindUrl);
env.put(Context.SECURITY_CREDENTIALS, password);
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.REFERRAL, "follow");
try {
return new InitialLdapContext(env, null);
} catch (NamingException e) {
e.printStackTrace()
}
}
Код для привязки работает, если я предоставляю:
- Имя входа в верхнем уровне, т.е.
NetBIOSDomainName\sAMAccountName
(например, домен\имя пользователя) или -
userPrincipalName
(например, [email protected]) или -
distinguishedName
(например, CN = имя пользователя, OU = xxx, DC = abc, DC = com) или -
objectSid
(например, S-1-5-21-3623811015-3361044348-30300820-1013)
как SECURITY_PRINCIPAL
, пока он не сработал, если был использован sAMAccountName
(например, имя пользователя) (я думаю, что только имена, которые являются уникальными в пределах леса, действительны).
Итак, каковы приемлемые шаблоны для SECURITY_PRINCIPAL
? Я просмотрел несколько похожих вопросов, но ни один из них не содержит ссылок на официальные документы AD/LDAP. Или это конфигурация, которую я мог бы найти где-нибудь? Спасибо!