Класс 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, если билет не удается получить из файлового кэша билетов, для получения TGT используется API Local Security Authority (LSA).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, если таблица ключей или ключ принципала должны храниться в закрытых учетных данных Subject. Если
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 удаляет имя пользователя и пароль, сохраненные в общем состоянии модуля, после завершения обоих этапов аутентификации (login и commit).
Если системное свойство принципала или ключ принципала уже заданы, значение "javax.security.auth.login.name" в общем состоянии игнорируется.
Если указано несколько способов получения билета или ключа, они используются в следующем порядке:
- кэш билетов
- таблица ключей
- общее состояние
- запрос пользователю
Обратите внимание: если какой-либо этап завершается ошибкой, выполняется переход к следующему этапу. Исключение только одно: если этап с общим состоянием завершается ошибкой и задан 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, но ключ нельзя получить ни запросив его у пользователя, ни из таблицы ключей, ни из общего состояния. Возникнет ошибка конфигурации.Это недопустимое сочетание, поскольку useKeyTab не установлено в true, а параметр keyTab задан. Возникнет ошибка конфигурации.keyTab = <filename> doNotPrompt = trueЗапросить у пользователя имя принципала и пароль. Использовать обмен данными аутентификации для получения TGT от KDC и заполнитьdebug = trueSubjectпринципалом и TGT. Вывести отладочные сообщения.Проверить TGT в кэше по умолчанию и заполнитьuseTicketCache = true doNotPrompt = trueSubjectпринципалом и TGT. Если TGT недоступен, не запрашивать его у пользователя, а завершить аутентификацию с ошибкой.Получить TGT для принципала из кэша по умолчанию и заполнить набор принципалов и закрытых учетных данных Subject. Если кэш билетов недоступен или не содержит TGT принципала, аутентификация завершится ошибкой.principal = <name> useTicketCache = true doNotPrompt = trueВыполнить поиск TGT принципала в кэше. Если он недоступен, использовать ключ из таблицы ключей для обмена данными аутентификации с KDC и получения TGT. Subject будет заполнен принципалом и TGT. Если ключ недоступен или недействителен, аутентификация завершится ошибкой.useTicketCache = true ticketCache = <file name> useKeyTab = true keyTab = <keytab filename> principal = <principal name> doNotPrompt = trueTGT будет получен из указанного кэша. Будет использовано имя принципала Kerberos, указанное в кэше билетов. Если TGT отсутствует в кэше билетов, пользователю будет предложено ввести имя принципала и пароль. TGT будет получен в результате обмена данными аутентификации с KDC. Subject будет заполнен TGT.useTicketCache = true ticketCache = <filename>Ключ принципала будет получен из таблицы ключей. Если ключ отсутствует в таблице ключей, пользователю будет предложено ввести пароль принципала. Subject будет заполнен ключом принципала, полученным либо из таблицы ключей, либо из введенного пароля.useKeyTab = true keyTab=<keytab filename> principal = <principal name> storeKey = trueПользователю будет предложено ввести имя принципала службы. Если долговременный ключ принципала доступен в таблице ключей, он будет добавлен в закрытые учетные данные Subject. Будет предпринята попытка обмена данными аутентификации с использованием имени принципала и ключа из таблицы ключей. В случае успеха TGT будет добавлен в закрытый набор учетных данных Subject. В противном случае аутентификация завершится ошибкой.useKeyTab = true keyTab = <keytabname> storeKey = true doNotPrompt = falseАкцептор будет не привязан к конкретному принципалу и сможет действовать от имени любого принципала, если для него имеются ключи в таблице ключей.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 посредством обмена данными аутентификации и добавляет его в закрытые учетные данные Subject. Этот секретный ключ сначала будет получен из таблицы ключей. Если ключ недоступен, пользователю будет предложено ввести пароль. В обоих случаях ключ, полученный из пароля, будет добавлен в закрытый набор учетных данных Subject.Настроено использование только в качестве акцептора; учетные данные не получаются посредством обмена AS. Для режима только акцептора задайте этому параметру значение false. Для инициаторов не задавайте этому параметру значение false.isInitiator = falseНастроено использование в качестве инициатора; учетные данные получаются посредством обмена AS. Для инициаторов задайте этому параметру значение true или оставьте параметр незаданным — в этом случае будет использоваться значение по умолчанию (true).isInitiator = true
- Начиная с:
- 1.4
Краткое описание конструкторов
| Конструктор | Описание |
|---|---|
Krb5LoginModule() |
Создает Krb5LoginModule. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
boolean |
abort() |
Этот метод вызывается, если общая аутентификация LoginContext завершилась неудачей. |
boolean |
commit() |
Этот метод вызывается, если общая аутентификация LoginContext завершилась успешно (успешно завершились соответствующие LoginModules с флагами REQUIRED, REQUISITE, SUFFICIENT и OPTIONAL). |
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, либо до истечения заданного промежутка реального времени. |
Подробное описание конструкторов
Krb5LoginModule
public Krb5LoginModule()
Krb5LoginModule.Подробное описание методов
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
- Определено в:
-
loginв интерфейсеLoginModule - Возвращает:
- true во всех случаях, поскольку этот
LoginModuleнельзя игнорировать. - Выбрасывает:
-
FailedLoginException— если аутентификация завершается ошибкой. -
LoginException— если этотLoginModuleне может выполнить аутентификацию.
commit
public boolean commit() throws LoginException
Если собственная попытка аутентификации этого LoginModule завершилась успешно (что проверяется путем извлечения закрытого состояния, сохраненного методом login), этот метод связывает Krb5Principal с Subject, находящимся в LoginModule. Он добавляет учетные данные Kerberos в закрытый набор учетных данных Subject. Если собственная попытка аутентификации этого 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.