Класс 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, используя опцию 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 Local Security Authority (LSA) для получения TGT.ticketCache:- Установите это значение в имя кэша билетов, содержащего TGT пользователя. Если это значение установлено,
useTicketCacheтакже должно быть установлено в true; в противном случае будет возвращена ошибка конфигурации.renewTGT:- Установите это значение в true, если вы хотите обновить TGT, когда он истекает более чем наполовину (время до истечения меньше времени с момента начала). Если это значение установлено,
useTicketCacheтакже должно быть установлено в true; в противном случае будет возвращена ошибка конфигурации.doNotPrompt:- Установите это значение в true, если вы не хотите, чтобы запрашивался пароль, если учетные данные не могут быть получены из кэша, keytab или через общий ресурс (значение по умолчанию — false). Если установлено в true, учетные данные должны быть получены из кэша, keytab или общего ресурса. В противном случае аутентификация завершится неудачей.
useKeyTab:- Установите это значение в true, если вы хотите, чтобы модуль получал ключ принципала из keytab (значение по умолчанию — False). Если
keytabне установлено, модуль найдет keytab из файла конфигурации Kerberos. Если он не указан в файле конфигурации Kerberos, он будет искать файл{user.home}{file.separator}krb5.keytab.keyTab:- Установите это значение в имя файла keytab для получения секретного ключа принципала.
storeKey:- Установите это значение в true, если вы хотите сохранить keytab или ключ принципала в частных учетных данных субъекта. Для
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, этот модуль аутентификации извлекает имя пользователя и пароль из общего состояния модуля, используя "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, этот модуль аутентификации очищает имя пользователя и пароль, сохраненные в общем состоянии модуля, после завершения обеих фаз аутентификации (входа в систему и подтверждения).
Если системная переменная принципала или ключ уже предоставлены, значение "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
Краткое описание конструкторов
| Конструктор | Описание |
|---|---|
Krb5LoginModule() |
Создаёт Krb5LoginModule. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
boolean |
abort() |
Этот метод вызывается, если общая аутентификация LoginContext завершилась неудачно. |
boolean |
commit() |
Этот метод вызывается, если общая аутентификация LoginContext прошла успешно (соответствующие модули аутентификации REQUIRED, REQUISITE, SUFFICIENT и OPTIONAL завершены успешно). |
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.- Specified by:
-
initializeв интерфейсеLoginModule - Parameters:
-
subject- аутентифицируемыйSubject. -
callbackHandler- обработчик обращений для общения с конечным пользователем (например, для запроса имён пользователей и паролей). -
sharedState- общее состояниеLoginModule. -
options- параметры, указанные в файле входаConfigurationдля данногоLoginModule.
login
public boolean login() throws LoginException
- Specified by:
-
loginв интерфейсеLoginModule - Returns:
- true во всех случаях, так как этот
LoginModuleне должен игнорироваться. - Throws:
-
FailedLoginException- если аутентификация завершилась неудачно. -
LoginException- если этотLoginModuleне может выполнить аутентификацию.
commit
public boolean commit() throws LoginException
Если собственный процесс аутентификации этого модуля аутентификации завершился успешно (проверяется путём извлечения сохранённого частного состояния методом login), этот метод ассоциирует Krb5Principal с Subject, расположенной в LoginModule. Он добавляет учётные данные Kerberos к закрытым данным субъекта. Если собственный процесс аутентификации этого модуля аутентификации завершился неудачно, этот метод удаляет любое сохранённое состояние.
- Specified by:
-
commitв интерфейсеLoginModule - Returns:
- true, если собственный вход в систему и попытка применения этого модуля аутентификации завершились успешно, или false в противном случае.
- Throws:
-
LoginException- если применение завершилось неудачно.
abort
public boolean abort() throws LoginException
Если собственный процесс аутентификации этого модуля аутентификации завершился успешно (проверяется путём извлечения сохранённого частного состояния методами login и commit), этот метод очищает любое сохранённое состояние.
- Specified by:
-
abortв интерфейсеLoginModule - Returns:
- false, если собственный вход в систему и/или попытка применения этого модуля аутентификации завершились неудачно, и true в противном случае.
- Throws:
-
LoginException- если отмена завершилась неудачно.
logout
public boolean logout() throws LoginException
Этот метод удаляет Krb5Principal, добавленную методом commit.
- Specified by:
-
logoutв интерфейсеLoginModule - Returns:
- true во всех случаях, так как этот
LoginModuleне должен игнорироваться. - Throws:
-
LoginException- если выход из системы завершился неудачно.
© 1993, 2023, 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/21/docs/api/jdk.security.auth/com/sun/security/auth/module/Krb5LoginModule.html