Класс 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 |
Инициализирует этот LoginModule. |
boolean |
login() |
Начинает аутентификацию пользователя. |
boolean |
logout() |
Выполняет выход пользователя. |
Подробное описание конструкторов
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— если выход завершается неудачей.
© 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