Spec-Zone.ru › OpenJDK 25

Класс 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

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

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
Выполняет выход пользователя.

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

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

Сообщить об ошибке или предложить улучшение
Дополнительные справочные материалы по API и документацию для разработчиков см. в разделе Документация Java SE, содержащем более подробные описания для разработчиков, концептуальные обзоры, определения терминов, обходные решения и примеры работающего кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или ее аффилированных лиц в США и других странах.
Авторские права © 1993, 2025, 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.
https://docs.oracle.com/en/java/javase/25/docs/api/jdk.security.auth/com/sun/security/auth/module/LdapLoginModule.html

Spec-Zone.ru

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