Класс 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). Этот модуль будет искать кэш билетов в следующих местах: в Solaris и 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, когда он истечёт более чем наполовину (время до истечения меньше, чем время с момента начала).
-
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, этот модуль получает имя пользователя и пароль из общего состояния модуля, используя "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 очищает имя пользователя и пароль, сохранённые в общем состоянии модуля, после завершения обеих фаз аутентификации (вход и подтверждение).
Если системная переменная или ключ принципала уже предоставлены, значение "javax.security.auth.login.name" в общем состоянии игнорируется.
Когда несколько механизмов для получения билета или ключа предоставляются, порядок предпочтения следующий:
- кэш билетов
- ключтаб
- общее состояние
- запрос к пользователю
Обратите внимание, что если любой шаг завершается неудачей, он переходит к следующему шагу. Единственное исключение — если шаг общего состояния завершается неудачей и useFirstPass = true, запрос к пользователю не выполняется.
Примеры некоторых значений конфигурации для Krb5LoginModule в файле конфигурации JAAS и результаты:
doNotPrompt = true This is an illegal combination since none of useTicketCache, useKeyTab, useFirstPass and tryFirstPass is set and the user can not be prompted for the password. ticketCache = <filename> This is an illegal combination since useTicketCache is not set to true and the ticketCache is set. A configuration error will occur. renewTGT = true This is an illegal combination since useTicketCache is not set to true and renewTGT is set. A configuration error will occur. storeKey = true useTicketCache = true doNotPrompt = true This is an illegal combination since storeKey is set to true but the key can not be obtained either by prompting the user or from the keytab, or from the shared state. A configuration error will occur. keyTab = <filename> doNotPrompt = true This is an illegal combination since useKeyTab is not set to true and the keyTab is set. A configuration error will occur. debug = true Prompt the user for the principal name and the password. Use the authentication exchange to get TGT from the KDC and populate the Subject with the principal and TGT. Output debug messages. useTicketCache = true doNotPrompt = true Check the default cache for TGT and populate the Subject with the principal and TGT. If the TGT is not available, do not prompt the user, instead fail the authentication. principal = <name> useTicketCache = true doNotPrompt = true Get the TGT from the default cache for the principal and populate the Subject's principal and private creds set. If ticket cache is not available or does not contain the principal's TGT authentication will fail. useTicketCache = true ticketCache = <file name> useKeyTab = true keyTab = <keytab filename> principal = <principal name> doNotPrompt = true Search the cache for the principal's TGT. If it is not available use the key in the keytab to perform authentication exchange with the KDC and acquire the TGT. The Subject will be populated with the principal and the TGT. If the key is not available or valid then authentication will fail. useTicketCache = true ticketCache = <filename> The TGT will be obtained from the cache specified. The Kerberos principal name used will be the principal name in the Ticket cache. If the TGT is not available in the ticket cache the user will be prompted for the principal name and the password. The TGT will be obtained using the authentication exchange with the KDC. The Subject will be populated with the TGT. useKeyTab = true keyTab=<keytab filename> principal = <principal name> storeKey = true The key for the principal will be retrieved from the keytab. If the key is not available in the keytab the user will be prompted for the principal's password. The Subject will be populated with the principal's key either from the keytab or derived from the password entered. useKeyTab = true keyTab = <keytabname> storeKey = true doNotPrompt = false The user will be prompted for the service principal name. If the principal's longterm key is available in the keytab , it will be added to the Subject's private credentials. An authentication exchange will be attempted with the principal name and the key from the Keytab. If successful the TGT will be added to the Subject's private credentials set. Otherwise the authentication will fail. isInitiator = false useKeyTab = true keyTab = <keytabname> storeKey = true principal = * The acceptor will be an unbound acceptor and it can act as any principal as long that principal has keys in the keytab. useTicketCache = true ticketCache = <file name> useKeyTab = true keyTab = <file name> storeKey = true principal = <principal name> The client's TGT will be retrieved from the ticket cache and added to the Subject's private credentials. If the TGT is not available in the ticket cache, or the TGT's client name does not match the principal name, Java will use a secret key to obtain the TGT using the authentication exchange and added to the Subject's private credentials. This secret key will be first retrieved from the keytab. If the key is not available, the user will be prompted for the password. In either case, the key derived from the password will be added to the Subject's private credentials set. isInitiator = false Configured to act as acceptor only, credentials are not acquired via AS exchange. For acceptors only, set this value to false. For initiators, do not set this value to false. isInitiator = true Configured to act as initiator, credentials are acquired via AS exchange. For initiators, set this value to true, or leave this option unset, in which case default value (true) will be used.
Конструкторы
| Конструктор | Описание |
|---|---|
Krb5LoginModule() |
Методы
| Модификатор и тип | Метод | Описание |
|---|---|---|
boolean | abort() | Этот метод вызывается, если общая аутентификация LoginContext завершилась неудачей. |
boolean | commit() | Этот метод вызывается, если общая аутентификация LoginContext прошла успешно (соответствующие модули REQUIRED, REQUISITE, SUFFICIENT и OPTIONAL LoginModules прошли успешно). |
void | initialize(Subject subject,
CallbackHandler callbackHandler,
Map<String,?> sharedState,
Map<String,?> options) | Инициализация этого |
boolean | login() | Аутентификация пользователя |
boolean | logout() | Выход пользователя из системы. |
Методы, объявленные в классе java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait Конструкторы
Krb5LoginModule
public 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 Этот метод вызывается, если общая проверка подлинности LoginContext прошла успешно (успешно выполнились соответствующие модули REQUIRED, REQUISITE, SUFFICIENT и OPTIONAL).
Если попытка проверки подлинности данного LoginModule прошла успешно (проверяется получением сохранённого в частном состоянии, сохранённого методом login ), этот метод связывает Krb5Principal с Subject расположенной в LoginModule. Он добавляет учетные данные Kerberos к набору частных учетных данных субъекта. Если попытка проверки подлинности данного LoginModule не удалась, этот метод удаляет любое ранее сохранённое состояние.
- Указано:
-
commitв интерфейсеLoginModule - Возвращает:
- true, если попытки входа и подтверждения данного LoginModule прошли успешно, и false в противном случае.
- Исключения:
-
LoginException- если подтверждение завершилось неудачно.
abort
public boolean abort()
throws LoginException Этот метод вызывается, если общая проверка подлинности LoginContext завершилась неудачей (соответствующие модули REQUIRED, REQUISITE, SUFFICIENT и OPTIONAL не прошли успешно).
Если попытка проверки подлинности данного LoginModule прошла успешно (проверяется получением сохранённого в частном состоянии, сохранённого методами login и commit ), этот метод очищает любое ранее сохранённое состояние.
- Указано:
-
abortв интерфейсеLoginModule - Возвращает:
- false, если попытки входа и/или подтверждения данного LoginModule завершились неудачей, и true в противном случае.
- Исключения:
-
LoginException- если прерывание завершилось неудачно.
logout
public boolean logout()
throws LoginException Выход пользователя.
Этот метод удаляет Krb5Principal, добавленный методом commit.
- Указано:
-
logoutв интерфейсеLoginModule - Возвращает:
- true во всех случаях, так как этот
LoginModuleне должен игнорироваться. - Исключения:
-
LoginException- если выход завершился неудачно.
© 1993, 2020, 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/11/docs/api/jdk.security.auth/com/sun/security/auth/module/Krb5LoginModule.html