Spec-Zone.ru › OpenJDK 24

Класс Krb5LoginModule

java.lang.Object
com.sun.security.auth.module.Krb5LoginModule
Все реализованные интерфейсы:
LoginModule
public class Krb5LoginModule extends Object implements LoginModule
Этот LoginModule аутентифицирует пользователей с использованием протоколов Kerberos.

Запись конфигурации для Krb5LoginModule имеет несколько параметров, которые контролируют процесс аутентификации и добавления в частный набор данных Subject. Независимо от этих параметров, набор принципалов Subject и частный набор данных обновляются только при вызове commit. При вызове commit, KerberosPrincipal добавляется в набор принципалов Subject (если principal не указан как "*"). Если isInitiator имеет значение true, KerberosTicket добавляется в частные данные Subject.

Если в записи конфигурации для KerberosLoginModule параметр storeKey установлен в true, то KerberosKey или KeyTab также будут добавлены в частные данные субъекта. При KerberosKey, ключи принципала будут получены из пароля пользователя, а KeyTab — это ключтаб, используемый, когда useKeyTab установлен в true. Объект KeyTab ограничен использованием указанным принципалом, если значение принципала не равно "*".

Этот LoginModule распознает параметр doNotPrompt. Если он установлен в true, пользователю не будет предложено ввести пароль.

Пользователь может указать расположение кэша билета, используя параметр ticketCache в записи конфигурации.

Пользователь может указать расположение ключтаба, используя параметр keyTab в записи конфигурации.

Имя принципала может быть указано в записи конфигурации с помощью параметра principal. Имя принципала может быть простым именем пользователя, именем сервиса, например, host/mission.eng.sun.com, или "*". Принципал также может быть задан с помощью системной переменной sun.security.krb5.principal. Эта переменная проверяется во время входа в систему. Если эта переменная не задана, используется имя принципала из конфигурации. В случае, когда переменная принципала не задана и запись принципала также отсутствует, пользователю предлагается ввести имя. Когда эта переменная установлена, и useTicketCache установлено в true, используется только TGT, относящийся к этому принципалу.

Ниже приведен список параметров конфигурации, поддерживаемых для Krb5LoginModule:

refreshKrb5Config:
Установите в значение true, если требуется обновление конфигурации перед вызовом метода login.
useTicketCache:
Установите в значение true, если требуется получить TGT из кэша билетов. Установите это значение в false, если модуль не должен использовать кэш билетов. (По умолчанию False). Этот модуль будет искать кэш билетов в следующих местах: в Linux он будет искать кэш билетов в /tmp/krb5cc_uid, где uid — числовой идентификатор пользователя. Если кэш билетов недоступен в указанном месте или если платформа Windows, он будет искать кэш по пути {user.home}{file.separator}krb5cc_{user.name}. Вы можете переопределить расположение кэша билетов, используя ticketCache. Для Windows, если билет не может быть извлечён из файлового кэша, он будет использовать API локальной службы безопасности (LSA), чтобы получить TGT.
ticketCache:
Установите имя кэша билетов, содержащего TGT пользователя. Если это значение установлено, то useTicketCache также должно быть установлено в true; в противном случае будет возвращена ошибка конфигурации.
renewTGT:
Установите в значение true, если требуется обновить TGT, когда он истекает более чем наполовину (время до истечения меньше, чем время с момента начала). Если это значение установлено, то useTicketCache также должно быть установлено в true; в противном случае будет возвращена ошибка конфигурации.
doNotPrompt:
Установите в значение true, если не требуется запрос пароля, если учетные данные не могут быть получены из кэша, таблицы ключей или через общий статус.(По умолчанию false). Если установлено в true, учетные данные должны быть получены из кэша, таблицы ключей или общего статуса. В противном случае аутентификация завершится неудачей.
useKeyTab:
Установите в значение true, если модуль должен получить ключ принципала из таблицы ключей.(Значение по умолчанию False). Если keytab не установлено, модуль будет искать таблицу ключей в файле конфигурации Kerberos. Если он не указан в файле конфигурации Kerberos, он будет искать файл {user.home}{file.separator}krb5.keytab.
keyTab:
Установите имя файла таблицы ключей для получения секретного ключа принципала.
storeKey:
Установите в значение true, если требуется хранить таблицу ключей или ключ принципала в частных учетных данных субъекта. Если isInitiator равно false, если principal равно «*», сохранённый KeyTab может быть использован кем угодно, иначе доступ ограничен только указанным принципалом.
principal:
Имя принципала, которое должно быть использовано. Принципал может быть простым именем пользователя, например «testuser», или именем сервиса, например «host/testhost.eng.sun.com». Вы можете использовать опцию principal, чтобы установить принципала, когда есть учетные данные для нескольких принципалов в keyTab или когда требуется только определённый кэш билетов. Принципал также может быть задан с помощью системной переменной sun.security.krb5.principal. Кроме того, если эта системная переменная определена, она будет использоваться. Если эта переменная не задана, будет использоваться имя принципала из конфигурации. Имя принципала может быть установлено в «*», когда isInitiator равно false. В этом случае приемник не привязан к одному принципалу. Он может действовать как любой принципал, запрошенный инициатором, если ключи для этого принципала могут быть найдены. Когда isInitiator равно true, имя принципала не может быть установлено в «*».
isInitiator:
Установите в значение true, если инициатор. Установите в значение false, если только приемник. (По умолчанию true). Примечание: не устанавливайте это значение в false для инициаторов.

Этот LoginModule также распознаёт следующие дополнительные Configuration опции, которые позволяют обмениваться именем пользователя и паролями между различными модулями аутентификации:

useFirstPass:
если значение true, данный модуль входа LoginModule извлекает имя пользователя и пароль из общего состояния модуля, используя «javax.security.auth.login.name» и «javax.security.auth.login.password» в качестве соответствующих ключей. Извлеченные значения используются для аутентификации. Если аутентификация не удается, попытка повторной аутентификации не предпринимается, и об ошибке сообщается вызывающему приложению.
tryFirstPass:
если значение true, данный модуль входа LoginModule извлекает имя пользователя и пароль из общего состояния модуля, используя «javax.security.auth.login.name» и «javax.security.auth.login.password» в качестве соответствующих ключей. Извлеченные значения используются для аутентификации. Если аутентификация не удается, модуль использует обработчик обращений CallbackHandler для извлечения нового имени пользователя и пароля и предпринимает ещё одну попытку аутентификации. Если аутентификация не удается, об ошибке сообщается вызывающему приложению.
storePass:
если значение true, данный модуль входа LoginModule сохраняет имя пользователя и пароль, полученные от CallbackHandler, в общем состоянии модуля, используя «javax.security.auth.login.name» и «javax.security.auth.login.password» в качестве соответствующих ключей. Это не выполняется, если для имени пользователя и пароля уже существуют значения в общем состоянии, или если аутентификация не удалась.
clearPass:
если значение true, данный модуль входа LoginModule очищает имя пользователя и пароль, сохранённые в общем состоянии модуля, после завершения обеих фаз аутентификации (входа и подтверждения).

Если системная переменная principal или ключ уже предоставлены, значение «javax.security.auth.login.name» в общем состоянии игнорируется.

Если предоставлено несколько механизмов извлечения билета или ключа, порядок предпочтения следующий:

  1. кеш билетов
  2. ключевой файл keytab
  3. общее состояние
  4. запрос у пользователя

Обратите внимание, что если какой-либо шаг завершится неудачей, произойдет откат к следующему шагу. Существует только одно исключение: если шаг общего состояния завершится неудачей и useFirstPass = true, запрос у пользователя не будет выполнен.

Примеры некоторых значений конфигурации для Krb5LoginModule в файле конфигурации JAAS и результаты:


 doNotPrompt = true
Это незаконная комбинация, так как ни один из useTicketCache, useKeyTab, useFirstPass и tryFirstPass не установлен, и пользователь не может быть запрошен на ввод пароля.

 ticketCache = <filename>
Это незаконная комбинация, так как useTicketCache не установлено в true, а ticketCache установлен. Произойдёт ошибка конфигурации.

 renewTGT = true
Это незаконная комбинация, так как useTicketCache не установлено в true, а renewTGT установлен. Произойдёт ошибка конфигурации.

 storeKey = true  useTicketCache = true  doNotPrompt = true
Это незаконная комбинация, так как storeKey установлено в true, но ключ не может быть получен ни путём запроса у пользователя, ни из keytab, ни из общего состояния. Произойдёт ошибка конфигурации.

 keyTab = <filename>  doNotPrompt = true
Это незаконная комбинация, так как useKeyTab не установлен в true, а keyTab установлен. Произойдёт ошибка конфигурации.

 debug = true
Запросить у пользователя имя участника и пароль. Использовать обмен аутентификацией для получения TGT от KDC и заполнить Subject именем участника и TGT. Вывести отладочные сообщения.

 useTicketCache = true  doNotPrompt = true
Проверить кэш по умолчанию на наличие TGT и заполнить Subject именем участника и TGT. Если TGT недоступен, не запрашивать пользователя, а вместо этого завершить аутентификацию с ошибкой.

 principal = <name>  useTicketCache = true  doNotPrompt = true
Получить TGT из кэша по умолчанию для участника и заполнить набор субъекта участника и личных учетных данных. Если кэш билетов недоступен или не содержит TGT участника, аутентификация завершится с ошибкой.

 useTicketCache = true
 ticketCache = <file name>
 useKeyTab = true
 keyTab = <keytab filename>
 principal = <principal name>
 doNotPrompt = true
Поиск в кэше TGT для участника. Если он недоступен, использовать ключ в keytab для выполнения обмена аутентификацией с KDC и получения TGT. Субъект будет заполнен участником и TGT. Если ключ недоступен или недействителен, аутентификация завершится с ошибкой.

 useTicketCache = true  ticketCache = <filename>
TGT будет получен из указанного кэша. Использованное имя участника Kerberos будет именем участника в кэше билетов. Если TGT недоступен в кэше билетов, пользователь будет запрошен на ввод имени участника и пароля. TGT будет получен с помощью обмена аутентификацией с KDC. Субъект будет заполнен TGT.

 useKeyTab = true  keyTab=<keytab filename>  principal = <principal name>  storeKey = true
Ключ для участника будет получен из keytab. Если ключ недоступен в keytab, пользователь будет запрошен на ввод пароля участника. Субъект будет заполнен ключом участника либо из keytab, либо полученным из введённого пароля.

 useKeyTab = true  keyTab = <keytabname>  storeKey = true  doNotPrompt = false
Пользователь будет запрошен на ввод имени участника службы. Если долгосрочный ключ участника доступен в keytab, он будет добавлен в личные учетные данные субъекта. Будет предпринята попытка обмена аутентификацией с именем участника и ключом из Keytab. В случае успеха TGT будет добавлен в набор личных учетных данных субъекта. В противном случае аутентификация завершится с ошибкой.

 isInitiator = false  useKeyTab = true  keyTab = <keytabname>  storeKey = true  principal = *
Акцептор будет незакреплённым акцептором, и он может действовать как любой участник, если у этого участника есть ключи в keytab.

 useTicketCache = true
 ticketCache = <file name>
 useKeyTab = true
 keyTab = <file name>
 storeKey = true
 principal = <principal name>
TGT клиента будет извлечён из кэша билетов и добавлен в личные учетные данные Subject. Если TGT недоступен в кэше билетов или имя клиента TGT не совпадает с именем участника, Java будет использовать секретный ключ для получения TGT с помощью обмена аутентификацией и добавит его в личные учетные данные субъекта. Этот секретный ключ сначала будет извлечён из keytab. Если ключ недоступен, пользователь будет запрошен на ввод пароля. В любом случае ключ, полученный из пароля, будет добавлен в набор личных учетных данных субъекта.

 isInitiator = false
Настроен на работу только как акцептор, учетные данные не получаются через обмен AS. Только для акцепторов установите это значение в false. Для инициаторов не устанавливайте это значение в false.

 isInitiator = true
Настроен на работу как инициатор, учетные данные получаются через обмен AS. Для инициаторов установите это значение в true или оставьте этот параметр без изменений, в этом случае будет использоваться значение по умолчанию (true).
Since:
1.4

Краткое описание конструкторов

Конструктор Описание
Krb5LoginModule()
Создаёт Krb5LoginModule.

Краткое описание методов

Модификатор и тип Метод Описание
boolean abort()
Этот метод вызывается, если общая аутентификация LoginContext завершилась неудачно.
boolean commit()
Этот метод вызывается, если общая аутентификация LoginContext завершилась успешно (все необходимые, требуемые, достаточные и необязательные модули LoginModule завершили свою работу).
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

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

Krb5LoginModule

public Krb5LoginModule()
Создаёт Krb5LoginModule.

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

initialize

public void initialize(Subject subject, CallbackHandler callbackHandler, Map<String,?> sharedState, Map<String,?> options)
Инициализирует этот LoginModule.
Определено в:
initialize в интерфейсе LoginModule
Параметры:
subject - Subject, который необходимо аутентифицировать.
callbackHandler - интерфейс для взаимодействия с конечным пользователем (например, запроса имени пользователя и пароля).
sharedState - состояние общих LoginModule.
options - параметры, указанные в Configuration для входа для данного конкретного LoginModule.

login

public boolean login() throws LoginException
Аутентификация пользователя
Определено в:
login в интерфейсе LoginModule
Возвращает:
true всегда, так как этот LoginModule не должен игнорироваться.
Исключения:
FailedLoginException - если аутентификация не удалась.
LoginException - если этот LoginModule не может выполнить аутентификацию.

commit

public boolean commit() throws LoginException
Этот метод вызывается, если общая аутентификация в LoginContext прошла успешно (успешно выполнились необходимые, требуемые, достаточные и необязательные модули LoginModules).

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

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

abort

public boolean abort() throws LoginException
Этот метод вызывается, если общая аутентификация в LoginContext завершилась неудачей (соответствующие ОБЯЗАТЕЛЬНЫЕ, ТРЕБУЕМЫЕ, ДОСТАТОЧНЫЕ и НЕОБЯЗАТЕЛЬНЫЕ LoginModules не выполнились).

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

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

logout

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

Этот метод удаляет Krb5Principal, который был добавлен методом 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://download.java.net/java/early_access/jdk24/docs/api/jdk.security.auth/com/sun/security/auth/module/Krb5LoginModule.html

Spec-Zone.ru

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