Класс 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» в общем состоянии игнорируется.
Если предоставлено несколько механизмов извлечения билета или ключа, порядок предпочтения следующий:
- кеш билетов
- ключевой файл keytab
- общее состояние
- запрос у пользователя
Обратите внимание, что если какой-либо шаг завершится неудачей, произойдет откат к следующему шагу. Существует только одно исключение: если шаг общего состояния завершится неудачей и useFirstPass = true, запрос у пользователя не будет выполнен.
Примеры некоторых значений конфигурации для Krb5LoginModule в файле конфигурации JAAS и результаты:
Это незаконная комбинация, так как ни один изdoNotPrompt = trueuseTicketCache, useKeyTab, useFirstPassиtryFirstPassне установлен, и пользователь не может быть запрошен на ввод пароля.Это незаконная комбинация, так какticketCache = <filename>useTicketCacheне установлено в true, а ticketCache установлен. Произойдёт ошибка конфигурации.Это незаконная комбинация, так какrenewTGT = trueuseTicketCacheне установлено в true, а renewTGT установлен. Произойдёт ошибка конфигурации.Это незаконная комбинация, так какstoreKey = true useTicketCache = true doNotPrompt = truestoreKeyустановлено в true, но ключ не может быть получен ни путём запроса у пользователя, ни из keytab, ни из общего состояния. Произойдёт ошибка конфигурации.Это незаконная комбинация, так как useKeyTab не установлен в true, а keyTab установлен. Произойдёт ошибка конфигурации.keyTab = <filename> doNotPrompt = trueЗапросить у пользователя имя участника и пароль. Использовать обмен аутентификацией для получения TGT от KDC и заполнитьdebug = trueSubjectименем участника и TGT. Вывести отладочные сообщения.Проверить кэш по умолчанию на наличие TGT и заполнитьuseTicketCache = true doNotPrompt = trueSubjectименем участника и TGT. Если TGT недоступен, не запрашивать пользователя, а вместо этого завершить аутентификацию с ошибкой.Получить TGT из кэша по умолчанию для участника и заполнить набор субъекта участника и личных учетных данных. Если кэш билетов недоступен или не содержит TGT участника, аутентификация завершится с ошибкой.principal = <name> useTicketCache = true doNotPrompt = trueПоиск в кэше TGT для участника. Если он недоступен, использовать ключ в keytab для выполнения обмена аутентификацией с KDC и получения TGT. Субъект будет заполнен участником и TGT. Если ключ недоступен или недействителен, аутентификация завершится с ошибкой.useTicketCache = true ticketCache = <file name> useKeyTab = true keyTab = <keytab filename> principal = <principal name> doNotPrompt = trueTGT будет получен из указанного кэша. Использованное имя участника Kerberos будет именем участника в кэше билетов. Если TGT недоступен в кэше билетов, пользователь будет запрошен на ввод имени участника и пароля. TGT будет получен с помощью обмена аутентификацией с KDC. Субъект будет заполнен TGT.useTicketCache = true ticketCache = <filename>Ключ для участника будет получен из keytab. Если ключ недоступен в keytab, пользователь будет запрошен на ввод пароля участника. Субъект будет заполнен ключом участника либо из keytab, либо полученным из введённого пароля.useKeyTab = true keyTab=<keytab filename> principal = <principal name> storeKey = trueПользователь будет запрошен на ввод имени участника службы. Если долгосрочный ключ участника доступен в keytab, он будет добавлен в личные учетные данные субъекта. Будет предпринята попытка обмена аутентификацией с именем участника и ключом из Keytab. В случае успеха TGT будет добавлен в набор личных учетных данных субъекта. В противном случае аутентификация завершится с ошибкой.useKeyTab = true keyTab = <keytabname> storeKey = true doNotPrompt = falseАкцептор будет незакреплённым акцептором, и он может действовать как любой участник, если у этого участника есть ключи в keytab.isInitiator = false useKeyTab = true keyTab = <keytabname> storeKey = true principal = *TGT клиента будет извлечён из кэша билетов и добавлен в личные учетные данныеuseTicketCache = true ticketCache = <file name> useKeyTab = true keyTab = <file name> storeKey = true principal = <principal name>Subject. Если TGT недоступен в кэше билетов или имя клиента TGT не совпадает с именем участника, Java будет использовать секретный ключ для получения TGT с помощью обмена аутентификацией и добавит его в личные учетные данные субъекта. Этот секретный ключ сначала будет извлечён из keytab. Если ключ недоступен, пользователь будет запрошен на ввод пароля. В любом случае ключ, полученный из пароля, будет добавлен в набор личных учетных данных субъекта.Настроен на работу только как акцептор, учетные данные не получаются через обмен AS. Только для акцепторов установите это значение в false. Для инициаторов не устанавливайте это значение в false.isInitiator = falseНастроен на работу как инициатор, учетные данные получаются через обмен AS. Для инициаторов установите это значение в true или оставьте этот параметр без изменений, в этом случае будет использоваться значение по умолчанию (true).isInitiator = true
- Since:
- 1.4
Краткое описание конструкторов
| Конструктор | Описание |
|---|---|
Krb5LoginModule() |
Создаёт Krb5LoginModule. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
boolean |
abort() |
Этот метод вызывается, если общая аутентификация LoginContext завершилась неудачно. |
boolean |
commit() |
Этот метод вызывается, если общая аутентификация LoginContext завершилась успешно (все необходимые, требуемые, достаточные и необязательные модули LoginModule завершили свою работу). |
void |
initialize |
Инициализировать этот LoginModule. |
boolean |
login() |
Проверить подлинность пользователя |
boolean |
logout() |
Выйти из системы пользователя. |
Подробное описание конструкторов
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
Если попытка аутентификации данного LoginModule прошла успешно (проверяется путем извлечения сохраненного в частном состоянии методом login), то этот метод связывает Krb5Principal с Subject, расположенным в LoginModule. Он добавляет учетные данные Kerberos в набор частных учетных данных субъекта. Если попытка аутентификации данного LoginModule завершилась неудачей, этот метод удаляет все сохраненное состояние.
- Определено в:
-
commitв интерфейсеLoginModule - Возвращает:
- true, если попытки входа и подтверждения данного LoginModule завершились успешно, или false в противном случае.
- Исключения:
-
LoginException- если подтверждение не удалось.
abort
public boolean abort() throws LoginException
Если попытка аутентификации данного 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