Spec-Zone.ru › OpenJDK 27

Класс 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, отладочные сообщения выводятся в стандартный поток вывода.

В Configuration также можно указать произвольные «свойства JNDI». Они добавляются в окружение и передаются поставщику 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()
Выполнить выход пользователя.

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

clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Модификатор и тип Метод Описание
protected Object clone()
Создает и возвращает копию этого объекта.
boolean equals(Object obj)
Указывает, равен ли этот объект другому объекту.
protected void finalize()
Устарело, будет удалено: этот элемент API подлежит удалению в будущей версии.
Финализация объявлена устаревшей и подлежит удалению в одном из будущих выпусков.
final Class<?> getClass()
Возвращает класс времени выполнения этого Object.
int hashCode()
Возвращает хеш-код этого объекта.
final void notify()
Пробуждает один поток, ожидающий на мониторе этого объекта.
final void notifyAll()
Пробуждает все потоки, ожидающие на мониторе этого объекта.
String toString()
Возвращает строковое представление объекта.
final void wait()
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова notify или interrupt.
final void wait(long timeoutMillis)
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова notify или interrupt, либо до истечения заданного промежутка реального времени.
final void wait(long timeoutMillis, int nanos)
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова notify или interrupt, либо до истечения заданного промежутка реального времени.

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

LdapLoginModule

public LdapLoginModule()
Создает LdapLoginModule.

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

initialize

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

login

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

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

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

commit

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

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

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

Определено в:
commit в интерфейсе LoginModule
Возвращает:
true, если собственные попытки входа и фиксации этого LoginModule прошли успешно, иначе false.
Выбрасывает:
LoginException — если фиксация завершается неудачно

abort

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

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

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

Определено в:
abort в интерфейсе LoginModule
Возвращает:
false, если собственные попытки входа и/или фиксации этого LoginModule завершились неудачно, иначе true.
Выбрасывает:
LoginException — если прерывание завершается неудачно.

logout

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

Этот метод удаляет субъекты, добавленные методом commit.

Определено в:
logout в интерфейсе LoginModule
Возвращает:
во всех случаях true, поскольку этот LoginModule нельзя игнорировать.
Выбрасывает:
LoginException — если выход завершается неудачно.

Сообщить об ошибке или предложить улучшение
Дополнительную справочную информацию по API и документацию для разработчиков см. в разделе Документация Java SE, содержащем более подробные описания для разработчиков, включая общие сведения, определения терминов, способы обхода проблем и рабочие примеры кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или ее дочерних компаний в США и других странах.
Авторское право © 1993, 2026, Oracle и/или ее дочерние компании, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

© 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.

Spec-Zone.ru

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