Класс 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() |
Выполнить выход пользователя. |
Методы, объявленные в классе Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait | Модификатор и тип | Метод | Описание |
|---|---|---|
protected Object |
clone() |
Создает и возвращает копию этого объекта. |
boolean |
equals |
Указывает, равен ли этот объект другому объекту. |
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 |
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова notify или interrupt, либо до истечения заданного промежутка реального времени. |
final void |
wait |
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова 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— если выход завершается неудачно.
© 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.