Класс 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" в общем состоянии игнорируется.

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

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

Обратите внимание, что если любой шаг завершается неудачей, он переходит к следующему шагу. Единственное исключение — если шаг общего состояния завершается неудачей и 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)

Инициализация этого LoginModule.

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

Spec-Zone .ru
спецификации, руководства, описания, API