Spec-Zone .ru
спецификации, руководства, описания, API
След: Именование Java и Интерфейс Каталога
Урок: Усовершенствованные Темы для Пользователей LDAP
Раздел: Безопасность
Режимы Аутентификации к LDAP
Домашняя страница > Именование Java и Интерфейс Каталога > Усовершенствованные Темы для Пользователей LDAP

Режимы Аутентификации к LDAP

В LDAP информация аутентификации предоставляется в "связывать" работе. В LDAP v2, клиент инициирует соединение с сервером LDAP, отправляя сервер "связывать" работа, которая содержит информацию об аутентификации.

В LDAP v3, эта работа служит той же самой цели, но это является дополнительным. Клиент, который отправляет запрос LDAP, не делая "связывание", обрабатывается как анонимный клиент (см. Анонимный раздел для деталей). В LDAP v3, "связывать" работа может быть отправлена в любое время, возможно не раз, во время соединения. Клиент может отправить "связывать" запрос в середине соединения, чтобы изменить его идентификационные данные. Если запрос успешен, то все выдающиеся запросы, которые используют старые идентификационные данные на соединении, отбрасываются, и соединение связывается с новыми идентификационными данными.

Информация аутентификации, предоставленная в "связывать" работе, зависит от механизма аутентификации, который выбирает клиент. См. Механизмы аутентификации для обсуждения механизма аутентификации.

Аутентификация к LDAP при использовании JNDI

В JNDI информация об аутентификации определяется в свойствах среды. Когда Вы создаете начальный контекст при использовании InitialDirContext class (или его суперкласс или подкласс), Вы предоставляете ряд свойств среды, некоторые из которых могли бы содержать информацию об аутентификации. Можно использовать следующие свойства среды, чтобы определить информацию об аутентификации.

Когда начальный контекст создается, базовый поставщик услуг LDAP извлекает информацию об аутентификации из этих свойств среды и использует LDAP, "обязывают" работу передавать их к серверу.

following example шоу, как, при использовании простого пароля в виде открытого текста, клиент аутентифицирует к серверу LDAP.

// Set up the environment for creating the initial context
Hashtable<String, Object> env = new Hashtable<String, Object>();
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, "ldap://localhost:389/o=JNDITutorial");

// Authenticate as S. User and password "mysecret"
env.put(Context.SECURITY_AUTHENTICATION, "simple");
env.put(Context.SECURITY_PRINCIPAL, 
        "cn=S. User, ou=NewHires, o=JNDITutorial");
env.put(Context.SECURITY_CREDENTIALS, "mysecret");

// Create the initial context
DirContext ctx = new InitialDirContext(env);

// ... do something useful with ctx

Используя Различную информацию об Аутентификации для Контекста

Если Вы хотите использовать различную информацию об аутентификации для существующего контекста, то можно использовать Context.addToEnvironment() и Context.removeFromEnvironment(), чтобы обновить свойства среды, которые содержат информацию об аутентификации. Последующие вызовы методов на контексте будут использовать новую информацию об аутентификации, чтобы связаться с сервером.

following example были созданы шоу, как информация об аутентификации контекста изменяется на "none" после контекста.

// Authenticate as S. User and the password "mysecret"
env.put(Context.SECURITY_AUTHENTICATION, "simple");
env.put(Context.SECURITY_PRINCIPAL, 
        "cn=S. User, ou=NewHires, o=JNDITutorial");
env.put(Context.SECURITY_CREDENTIALS, "mysecret");

// Create the initial context
DirContext ctx = new InitialDirContext(env);

// ... do something useful with ctx

// Change to using no authentication
ctx.addToEnvironment(Context.SECURITY_AUTHENTICATION, "none");

// ... do something useful with ctx

Отказы аутентификации

Аутентификация может перестать работать по ряду причин. Например, если Вы предоставляете неправильную информацию аутентификации, такую как неправильный пароль или основное имя, затем AuthenticationException бросается.

Вот an example это - изменение предыдущего примера. На сей раз неправильный пароль заставляет аутентификацию перестать работать.

// Authenticate as S. User and give an incorrect password
env.put(Context.SECURITY_AUTHENTICATION, "simple");
env.put(Context.SECURITY_PRINCIPAL, 
        "cn=S. User, ou=NewHires, o=JNDITutorial");
env.put(Context.SECURITY_CREDENTIALS, "notmysecret");

Это производит следующий вывод.

javax.naming.AuthenticationException: [LDAP: error code 49 - Invalid Credentials]
        ...

Поскольку различные серверы поддерживают различные механизмы аутентификации, Вы могли бы запросить механизм аутентификации, который не поддерживает сервер. В этом случае AuthenticationNotSupportedException будет брошен.

Вот an example это - изменение предыдущего примера. На сей раз неподдерживаемый механизм аутентификации ("custom") заставляет аутентификацию перестать работать.

// Authenticate as S. User and the password "mysecret"
env.put(Context.SECURITY_AUTHENTICATION, "custom");
env.put(Context.SECURITY_PRINCIPAL, 
        "cn=S. User, ou=NewHires, o=JNDITutorial");
env.put(Context.SECURITY_CREDENTIALS, "mysecret");

Это производит следующий вывод.

javax.naming.AuthenticationNotSupportedException: custom
        ...

Проблемы с примерами? Попытайтесь Компилировать и Выполнить Примеры: FAQ.
Жалобы? Поздравление? Предложения? Дайте нам свою обратную связь.

Предыдущая страница: Безопасность
Следующая страница: Механизмы аутентификации