Аутентификация по VDS LDAP

Я хочу аутентифицировать пользователя по VDS(серверу виртуальных каталогов) с использованием Java.

  • Чем VDS отличается от LDAP? Или VDS также работает по протоколу LDAP?

Пожалуйста, помогите с любым примером кода Java для аутентификации на VDS

Пример кода для аутентификации по LDAP приведен ниже

String userName = "John P R-Asst General Manager";
String passWord = "asdfgh123";
String base ="OU=SOU,DC=example,DC=com";
String dn = "cn=" + userName + "," + base;

String ldapURL = "ldap://mdsdc3.example.com:389";
authEnv.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory");
authEnv.put(Context.PROVIDER_URL, ldapURL);
authEnv.put(Context.SECURITY_AUTHENTICATION, "simple");
authEnv.put(Context.SECURITY_PRINCIPAL, dn);
authEnv.put(Context.SECURITY_CREDENTIALS, password);

try {
    DirContext authContext = new InitialDirContext(authEnv);
    return true;

} catch (NamingException namEx) {
    return false;
} 

Для аутентификации на VDS требуется полный dn. Потому что, по мнению экспертов, в VDS необходимо отправить только имя пользователя и пароль. Он автоматически найдет свое DN и выполнит аутентификацию. Буду благодарен, если кто-нибудь предоставит хороший справочный материал относительно ldap и vds

1 ответ

Виртуальный сервер каталогов - это тип сервера, который обеспечивает единое представление идентификаторов независимо от того, как они хранятся. (Или вы можете предпочесть определение Википедии: "программный уровень, который предоставляет единую точку доступа для приложений управления идентификационными данными и сервисных платформ").

LDAP - это протокол (отсюда и "P") для связи с серверами каталогов.

Не существует необходимой связи между LDAP и VDS, но вполне вероятно, что VDS предоставляет и интерфейс LDAP, и, возможно, другие программные интерфейсы (в частности, Kerberos). Детали того, как вы будете взаимодействовать с VDS, будут зависеть от конфигурации, с которой вы пытаетесь общаться, но LDAP - хорошая ставка.

Что касается необходимости полного DN, вам даже не нужно полное DN для аутентификации на обычном Active Directory. Более обычным режимом было бы поставить что-то вроде DOMAIN\username (с использованием sAMAccountName) или же username@dc.example.com (это user principal name) как SECURITY_PRINCIPAL, В вашем примере пользователь должен будет ввести John P R-Asst General Manager а не что-то, что они могут считать своим "именем пользователя".

Однако вам необходимо определить, что VDS, с которым вы пытаетесь установить связь, требует имени пользователя. Нужно ли это DOMAIN\username, что-то другое? Это детали, которые каждый, кто использует VDS, с которым вы общаетесь, должен предоставить вам.

В коде вы должны получить что-то вроде этого (при условии, что вы можете использовать LDAP):

String userName = "DOMAIN\johnp";
String passWord = "asdfgh123";

String ldapURL = "ldaps://vds.example.com";
authEnv.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory");
authEnv.put(Context.PROVIDER_URL, ldapURL);
authEnv.put(Context.SECURITY_AUTHENTICATION, "simple");
authEnv.put(Context.SECURITY_PRINCIPAL, username);
authEnv.put(Context.SECURITY_CREDENTIALS, password);

try {
    DirContext authContext = new InitialDirContext(authEnv);
    return true;
} catch (NamingException namEx) {
    return false;
} 
Другие вопросы по тегам