Spec-Zone.ru › OpenJDK 17

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

Также могут быть указаны произвольные "свойства 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;
     };

 
Примечание:
При активном SecurityManager приложение, создающее LoginContext и использующее LoginModule, должно обладать определёнными разрешениями.

Если приложение создаёт контекст входа, используя установленный Configuration, то оно должно иметь разрешение AuthPermission для создания контекстов входа. Например, следующая политика безопасности разрешает приложению в текущем каталоге пользователя создание любого контекста входа:


     grant codebase "file:${user.dir}/" {
         permission javax.security.auth.AuthPermission "createLoginContext.*";
     };
     
В альтернативном случае, если приложение создаёт контекст входа, используя указанный вызывающим объектом Configuration, то приложению должны быть предоставлены разрешения, необходимые LoginModule. Данный модуль требует следующих двух разрешений:
  • Разрешение SocketPermission для подключения к серверу LDAP.
  • Разрешение AuthPermission для изменения набора Principal, связанных с Subject.

Например, следующая политика безопасности предоставляет приложению в текущем каталоге пользователя все разрешения, необходимые этому модулю:


     grant codebase "file:${user.dir}/" {
         permission java.net.SocketPermission "*:389", "connect";
         permission java.net.SocketPermission "*:636", "connect";
         permission javax.security.auth.AuthPermission "modifyPrincipals";
     };
     
Since:
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()
Выходит из системы пользователя.

Методы, объявленные в классе java.lang.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.
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
Завершает аутентификацию пользователя.

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

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

Specified by:
commit в интерфейсе LoginModule
Возвращает:
true, если попытки входа и подтверждения модуля завершились успешно, иначе false.
Исключения:
LoginException - если подтверждение не удалось

abort

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

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

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

Specified by:
abort в интерфейсе LoginModule
Возвращает:
false, если попытки входа и/или подтверждения модуля завершились неудачей, и true в противном случае.
Исключения:
LoginException - если прерывание не удалось.

logout

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

Этот метод удаляет принципы, добавленные методом commit.

Specified by:
logout в интерфейсе LoginModule
Возвращает:
true во всех случаях, так как этот LoginModule не должен игнорироваться.
Исключения:
LoginException - если выход не удался.

© 1993, 2021, 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/17/docs/api/jdk.security.auth/com/sun/security/auth/module/LdapLoginModule.html

Spec-Zone.ru

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