Spec-Zone.ru › OpenJDK 24

Класс LdapLoginModule

java.lang.Object
com.sun.security.auth.module.LdapLoginModule
Все реализованные интерфейсы:
LoginModule
public class LdapLoginModule extends Object implements LoginModule
Этот LoginModule выполняет аутентификацию на основе LDAP. Имя пользователя и пароль проверяются по соответствующим учетным данным пользователя, хранящимся в каталоге LDAP. Этот модуль требует, чтобы предоставленный CallbackHandler поддерживал NameCallback и PasswordCallback. Если аутентификация прошла успешно, создаётся новый LdapPrincipal с использованием имени пользователя и новый UserPrincipal с использованием имени пользователя, и оба ассоциируются с текущим Subject.

Этот модуль работает в одном из трёх режимов: поиск-сначала, аутентификация-сначала или только аутентификация. Режим выбирается путём указания определённого набора опций.

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

В режиме аутентификации-сначала сначала выполняется попытка аутентификации с использованием предоставленного имени пользователя и пароля, а затем выполняется поиск в каталоге LDAP. Если аутентификация успешна, выполняется поиск с использованием предоставленного имени пользователя в сочетании с указанным фильтром поиска. Для включения этого режима необходимо установить опции authIdentity и userFilter. Используйте режим аутентификации-сначала при доступе к каталогу LDAP, настроенному на запрет анонимных поисков.

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

Следующая опция является обязательной и должна быть указана в настройке входа модуля Configuration:

userProvider=ldap_urls
Эта опция определяет каталог LDAP, в котором хранятся записи пользователей. ldap_urls — это список разделенных пробелами URL-адресов LDAP (RFC 2255), определяющих сервер LDAP для использования и позицию в его древовидной структуре каталога, где располагаются записи пользователей. При указании нескольких URL-адресов LDAP каждый из них пробуется по очереди, пока не будет установлено первое успешное подключение. Пробелы в компоненте имени пользователя URL должны быть экранированы стандартным способом с использованием символа процента ('%') и двух шестнадцатеричных цифр (см. URI). Компоненты запроса также должны быть опущены из URL-адреса.

Поддерживается автоматическое обнаружение сервера LDAP по DNS (RFC 2782) (после настройки DNS для поддержки такой службы). Она активируется путём пропускания компонентов имени хоста и номера порта из URL-адреса LDAP.

Этот модуль также распознает следующие необязательные опции Configuration:

userFilter=ldap_filter
Эта опция задаёт фильтр поиска для поиска записи пользователя в каталоге LDAP. Используется для определения имени пользователя. ldap_filter — строка фильтра LDAP (RFC 2254). Если она содержит специальный токен "{USERNAME}", этот токен будет заменён предоставленным значением имени пользователя перед использованием фильтра для поиска в каталоге.
authIdentity=auth_id
Эта опция задаёт идентификатор, который необходимо использовать при аутентификации пользователя в каталоге LDAP. auth_id может быть строкой имени пользователя LDAP (RFC 2253) или другим строковым именем. Она должна содержать специальный токен "{USERNAME}", который будет заменён предоставленным значением имени пользователя перед использованием имени для аутентификации. Обратите внимание, что если эта опция не содержит имени пользователя, то должна быть указана также опция userFilter.
authzIdentity=authz_id
Эта опция задаёт идентификатор авторизации для пользователя. authz_id — любое строковое имя. Если она состоит из одного специального токена в фигурных скобках, то этот токен обрабатывается как имя атрибута и заменяется единственным значением этого атрибута из записи пользователя LDAP. Если атрибут не найден, опция игнорируется. Если эта опция указана, и пользователь успешно прошёл аутентификацию, создаётся дополнительный UserPrincipal с использованием идентификатора авторизации, и он ассоциируется с текущим Subject.
useSSL
если false, этот модуль не устанавливает SSL-соединение с сервером LDAP перед попыткой аутентификации. SSL используется для защиты конфиденциальности пароля пользователя, так как он передаётся открытым текстом по LDAP. По умолчанию этот модуль использует SSL.
useFirstPass
если true, этот модуль извлекает имя пользователя и пароль из общего состояния модуля, используя "javax.security.auth.login.name" и "javax.security.auth.login.password" в качестве соответствующих ключей. Полученные значения используются для аутентификации. Если аутентификация не удалась, попытка повтора не предпринимается, и об ошибке сообщается вызывающему приложению.
tryFirstPass
если true, этот модуль извлекает имя пользователя и пароль из общего состояния модуля, используя "javax.security.auth.login.name" и "javax.security.auth.login.password" в качестве соответствующих ключей. Полученные значения используются для аутентификации. Если аутентификация не удалась, модуль использует CallbackHandler для извлечения нового имени пользователя и пароля и предпринимает ещё одну попытку аутентификации. Если аутентификация не удалась, об ошибке сообщается вызывающему приложению.
storePass
если true, этот модуль сохраняет имя пользователя и пароль, полученные от CallbackHandler, в общем состоянии модуля, используя "javax.security.auth.login.name" и "javax.security.auth.login.password" в качестве соответствующих ключей. Это не выполняется, если для имени пользователя и пароля уже существуют значения в общем состоянии или если аутентификация не удалась.
clearPass
если true, этот модуль очищает имя пользователя и пароль, сохранённые в общем состоянии модуля, после завершения обеих фаз аутентификации (вход и подтверждение).
debug
если true, сообщения отладки отображаются в потоке стандартного вывода.

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

  • java.naming.provider.url
  • java.naming.security.principal
  • java.naming.security.credentials
  • java.naming.security.protocol

Ниже приведены три примера Configuration. Первый включает режим поиска-сначала. Он определяет сервер LDAP и указывает, что записи пользователей должны находиться по их атрибутам uid и objectClass. Также указывается, что должен быть создан идентификатор на основе атрибута employeeNumber пользователя. Второй включает режим аутентификации-сначала. Он запрашивает динамическое определение сервера LDAP, аутентификацию по предоставленному имени пользователя напрямую, но без защиты SSL, и поиск записей пользователей по одному из трёх атрибутов имён и атрибуту objectClass. Третий включает режим только аутентификации. Он определяет альтернативные сервера LDAP, указывает имя пользователя для аутентификации и фиксированный идентификатор для авторизации. Поиск в каталоге не выполняется.


     ExampleApplication {
         com.sun.security.auth.module.LdapLoginModule REQUIRED
              userProvider="ldap://ldap-svr/ou=people,dc=example,dc=com"
              userFilter="(&(uid={USERNAME})(objectClass=inetOrgPerson))"
              authzIdentity="{EMPLOYEENUMBER}"
              debug=true;
     };

     ExampleApplication {
         com.sun.security.auth.module.LdapLoginModule REQUIRED
             userProvider="ldap:///cn=users,dc=example,dc=com"
             authIdentity="{USERNAME}"
             userFilter="(&(|(samAccountName={USERNAME})(userPrincipalName={USERNAME})(cn={USERNAME}))(objectClass=user))"
             useSSL=false
             debug=true;
     };

     ExampleApplication {
         com.sun.security.auth.module.LdapLoginModule REQUIRED
             userProvider="ldap://ldap-svr1 ldap://ldap-svr2"
             authIdentity="cn={USERNAME},ou=people,dc=example,dc=com"
             authzIdentity="staff"
             debug=true;
     };

 
С:
1.6

Краткое описание конструкторов

Конструктор Описание
LdapLoginModule()
Создаёт экземпляр LdapLoginModule.

Краткое описание методов

Модификатор и тип Метод Описание
boolean abort()
Прервать аутентификацию пользователя.
boolean commit()
Завершить аутентификацию пользователя.
void initialize(Subject subject, CallbackHandler callbackHandler, Map<String,?> sharedState, Map<String,?> options)
Инициализировать данный LoginModule.
boolean login()
Начать аутентификацию пользователя.
boolean logout()
Выйти из системы для пользователя.

Методы, объявленные в классе java.lang.Object

clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

Подробное описание конструкторов

LdapLoginModule

public LdapLoginModule()
Создаёт экземпляр LdapLoginModule.

Подробное описание методов

initialize

public void initialize(Subject subject, CallbackHandler callbackHandler, Map<String,?> sharedState, Map<String,?> options)
Инициализировать данный LoginModule.
Specified by:
initialize в интерфейсе LoginModule
Параметры:
subject - Subject, который будет аутентифицироваться.
callbackHandler - CallbackHandler для получения имени пользователя и пароля.
sharedState - общие данные состояния LoginModule.
options - опции, указанные в параметрах входа в систему Configuration для конкретного LoginModule.

login

public boolean login() throws LoginException
Начать аутентификацию пользователя.

Получить учётные данные пользователя и проверить их по указанному каталогу LDAP.

Specified by:
login в интерфейсе LoginModule
Возвращает:
true всегда, так как данный LoginModule не должен игнорироваться.
Исключение:
FailedLoginException - если аутентификация не удалась.
LoginException - если данный LoginModule не может выполнить аутентификацию.

commit

public boolean commit() throws LoginException
Завершить аутентификацию пользователя.

Этот метод вызывается, если общая аутентификация LoginContext прошла успешно (соответствующие LoginModule с REQUIRED, REQUISITE, SUFFICIENT и OPTIONAL успешно завершили работу).

Если собственная попытка аутентификации этого LoginModule прошла успешно (проверяется путем извлечения сохранённого в частном состоянии, сохранённого методом login), то этот метод связывает LdapPrincipal и один или несколько UserPrincipal с Subject, расположенным в LoginModule. Если собственная попытка аутентификации этого LoginModule не удалась, то этот метод удаляет все сохранённые состояния.

Specified by:
commit в интерфейсе LoginModule
Возвращает:
true, если собственные попытки входа в систему и подтверждения данного LoginModule прошли успешно, или false в противном случае.
Исключение:
LoginException - если подтверждение не удалось

abort

public boolean abort() throws LoginException
Прервать аутентификацию пользователя.

Этот метод вызывается, если общая аутентификация не удалась. (соответствующие LoginModule с REQUIRED, REQUISITE, SUFFICIENT и OPTIONAL не прошли успешно).

Если собственная попытка аутентификации этого LoginModule прошла успешно (проверяется путем извлечения сохранённого в частном состоянии, сохранённого методами login и commit), то этот метод очищает все сохранённые состояния.

Specified by:
abort в интерфейсе LoginModule
Возвращает:
false, если собственные попытки входа в систему и/или подтверждения данного LoginModule не удались, и true в противном случае.
Исключение:
LoginException - если прерывание не удалось.

logout

public boolean logout() throws LoginException
Выйти из системы для пользователя.

Этот метод удаляет принципы, которые были добавлены методом commit.

Specified by:
logout в интерфейсе LoginModule
Возвращает:
true во всех случаях, так как данный LoginModule не должен игнорироваться.
Исключение:
LoginException - если выход не удался.

© 1993, 2025, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://download.java.net/java/early_access/jdk24/docs/api/jdk.security.auth/com/sun/security/auth/module/LdapLoginModule.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API