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