Класс GSSManager
public abstract class GSSManager extends Object
GSSName, GSSCredential и GSSContext. Он также имеет методы для запроса списка доступных механизмов и типов имён, которые поддерживает каждый механизм. Экземпляр по умолчанию GSSManager подкласса может быть получен через статический метод getInstance, но приложения могут свободно создавать другие подклассы GSSManager. Экземпляр по умолчанию GSSManager будет поддерживать механизм Kerberos v5 GSS-API в дополнение к другим, если таковые имеются. Этот механизм идентифицируется с помощью Oid "1.2.840.113554.1.2.2" и определен в RFC 1964.
Подкласс, расширяющий абстрактный класс GSSManager, может быть реализован как модульный провайдер, использующий спецификацию провайдера известных сервисов. API GSSManager позволяет приложению устанавливать предпочтения провайдера для такой реализации. Эти методы также позволяют реализации выбрасывать четко определённое исключение в случае если основанная на провайдере конфигурация не поддерживается. Приложения, которые ожидают портативности, должны быть осведомлены об этом и должны корректно обрабатывать это исключение.
Предполагается, что будут три наиболее распространённых способа использования провайдеров:
- Приложению неважно, какой провайдер используется (случай по умолчанию).
- Приложение хочет, чтобы определённый провайдер использовался в приоритете, либо для определённого механизма, либо всегда, независимо от механизма.
- Приложение хочет использовать локально сконфигурированные провайдеры по возможности, но если поддержка отсутствует для одного или нескольких механизмов, то оно хочет перейти к своему собственному провайдеру.
Класс GSSManager имеет два метода, которые позволяют использовать эти режимы: addProviderAtFront и addProviderAtEnd. Эти методы создают упорядоченный список пар <провайдер, oid>, где каждая пара указывает предпочтение провайдера для заданного oid.
Важно отметить, что существуют определенные взаимодействия между различными объектами GSS-API, созданными GSSManager, где провайдер, используемый для определенного механизма, должен быть согласован между всеми объектами. Например, если GSSCredential содержит элементы от провайдера p для механизма m, то он обычно должен передаваться в GSSContext, который будет использовать провайдер p для механизма m. Простое правило, которое максимизирует переносимость, состоит в том, что объекты, созданные различными GSSManager'ами, не должны смешиваться, и если возможно, должен быть создан другой экземпляр GSSManager, если приложение хочет вызвать метод addProviderAtFront на GSSManager, который уже создал объект.
Вот пример кода, показывающий, как можно использовать GSSManager:
GSSManager manager = GSSManager.getInstance();
Oid krb5Mechanism = new Oid("1.2.840.113554.1.2.2");
Oid krb5PrincipalNameType = new Oid("1.2.840.113554.1.2.2.1");
// Identify who the client wishes to be
GSSName userName = manager.createName("duke", GSSName.NT_USER_NAME);
// Identify the name of the server. This uses a Kerberos specific
// name format.
GSSName serverName = manager.createName("nfs/foo.sun.com",
krb5PrincipalNameType);
// Acquire credentials for the user
GSSCredential userCreds = manager.createCredential(userName,
GSSCredential.DEFAULT_LIFETIME,
krb5Mechanism,
GSSCredential.INITIATE_ONLY);
// Instantiate and initialize a security context that will be
// established with the server
GSSContext context = manager.createContext(serverName,
krb5Mechanism,
userCreds,
GSSContext.DEFAULT_LIFETIME);
Сторона сервера может использовать следующую вариацию этого кода:
// Acquire credentials for the server
GSSCredential serverCreds = manager.createCredential(serverName,
GSSCredential.DEFAULT_LIFETIME,
krb5Mechanism,
GSSCredential.ACCEPT_ONLY);
// Instantiate and initialize a security context that will
// wait for an establishment request token from the client
GSSContext context = manager.createContext(serverCreds);
- С момента:
- 1.4
- См. также:
Краткое описание конструкторов
| Конструктор | Описание |
|---|---|
GSSManager() |
Конструктор для вызова подклассами. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
abstract void |
addProviderAtEnd |
Этот метод используется для указания GSSManager, что приложение хочет использовать конкретный провайдер, если не удастся найти другой провайдер, который поддерживает указанный механизм. |
abstract void |
addProviderAtFront |
Этот метод используется для указания GSSManager, что приложение хочет использовать конкретный провайдер впереди всех других, когда требуется поддержка для данного механизма. |
abstract GSSContext |
createContext |
Метод-фабрика для создания ранее экспортированного контекста. |
abstract GSSContext |
createContext |
Метод-фабрика для создания контекста со стороны получателя. |
abstract GSSContext |
createContext |
Метод-фабрика для создания контекста со стороны инициатора. |
abstract GSSCredential |
createCredential |
Метод-фабрика для получения по умолчанию учётных данных. |
abstract GSSCredential |
createCredential |
Метод-фабрика для получения учётных данных по набору механизмов. |
abstract GSSCredential |
createCredential |
Метод-фабрика для получения учётных данных для одного механизма. |
abstract GSSName |
createName |
Метод-фабрика для преобразования массива байт, содержащего имя из указанного пространства имён, в объект GSSName. |
abstract GSSName |
createName |
Метод-фабрика для преобразования массива байт, содержащего имя из указанного пространства имён, в объект GSSName и его канонизации одновременно для механизма. |
abstract GSSName |
createName |
Метод-фабрика для преобразования строкового имени из указанного пространства имён в объект GSSName. |
abstract GSSName |
createName |
Метод-фабрика для преобразования строкового имени из указанного пространства имён в объект GSSName и его канонизации одновременно для механизма. |
static GSSManager |
getInstance() |
Возвращает реализацию GSSManager по умолчанию. |
abstract Oid[] |
getMechs() |
Возвращает список механизмов, доступных вызывающим GSS-API через этот GSSManager. |
abstract Oid[] |
getMechsForName |
Возвращает список механизмов, которые поддерживают указанный тип имени. |
abstract Oid[] |
getNamesForMech |
Возвращает типы имён, поддерживаемые указанным механизмом. |
Подробное описание конструкторов
GSSManager
public GSSManager()
Подробное описание методов
getInstance
public static GSSManager getInstance()
- Возвращает:
- реализация GSSManager
getMechs
public abstract Oid[] getMechs()
getInstance(), включает Oid "1.2.840.113554.1.2.2" в свой список. Этот Oid идентифицирует механизм GSS-API Kerberos v5, определённый в RFC 1964.- Возвращает:
- массив объектов Oid, соответствующих доступным механизмам. Значение
nullвозвращается, когда механизмы недоступны (пример — когда механизмы настраиваются динамически, и в настоящее время механизмы не установлены).
getNamesForMech
public abstract Oid[] getNamesForMech(Oid mech) throws GSSException
По умолчанию GSSManager включает поддержку механизма Kerberos v5. Когда указан этот механизм ("1.2.840.113554.1.2.2"), возвращаемый список будет содержать, по крайней мере, следующие типы имён: GSSName.NT_HOSTBASED_SERVICE, GSSName.NT_EXPORT_NAME и специфичный для Kerberos v5 Oid "1.2.840.113554.1.2.2.1". Пространство имён для Oid "1.2.840.113554.1.2.2.1" определено в RFC 1964.
- Параметры:
-
mech- Oid механизма, который необходимо запросить - Возвращает:
- массив объектов Oid, соответствующих типам имён, которые поддерживает механизм.
- Выбрасывает:
-
GSSException- содержащий следующие основные коды ошибок:GSSException.BAD_MECHGSSException.FAILURE - См. также:
getMechsForName
public abstract Oid[] getMechsForName(Oid nameType)
Механизм Kerberos v5 ("1.2.840.113554.1.2.2") всегда будет возвращён в этом списке, когда указанный тип имени — один из GSSName.NT_HOSTBASED_SERVICE, GSSName.NT_EXPORT_NAME или "1.2.840.113554.1.2.2.1".
- Параметры:
-
nameType- Oid типа имени для поиска - Возвращает:
- массив объектов Oid, соответствующих механизмам, которые поддерживают указанный тип имени.
nullвозвращается, если механизмы, поддерживающие указанный тип имени, не найдены. - См. также:
createName
public abstract GSSName createName(String nameStr, Oid nameType) throws GSSException
GSSName будет содержать несколько представлений имени, по одному для каждого поддерживаемого механизма; два исключения — когда параметр типа пространства имён указывает NT_EXPORT_NAME или когда реализация GSS-API не многомеханизменная. Не рекомендуется использовать этот метод с типом NT_EXPORT_NAME, потому что представление ранее экспортированного имени, состоящего из произвольных байтов, как строки может привести к проблемам с кодировками символов. В таких случаях рекомендуется передавать байты напрямую в перегруженную форму этого метода createName.- Параметры:
-
nameStr- строка, представляющая печатную форму создаваемого имени. -
nameType- Oid, определяющий пространство имён предоставленного печатного имени.nullможет быть использовано для указания того, что каждый механизм, анализирующий nameStr, должен предполагать собственную печатную форму по умолчанию. Не рекомендуется использовать nametype NT_EXPORT_NAME с этим методом. - Возвращает:
- GSSName, представляющий указанного принципала
- Выбрасывает:
-
GSSException- содержащий следующие основные коды ошибок:GSSException.BAD_NAMETYPE,GSSException.BAD_NAME,GSSException.BAD_MECH,GSSException.FAILURE - См. также:
createName
public abstract GSSName createName(byte[] name, Oid nameType) throws GSSException
GSSName будет содержать несколько представлений имени, по одному для каждого поддерживаемого механизма; два исключения — когда параметр типа пространства имён указывает NT_EXPORT_NAME или когда реализация GSS-API не многомеханизменная. Байты, переданные на вход, интерпретируются каждым базовым механизмом в соответствии с выбранной кодировкой для данного типа имени.- Параметры:
-
name- массив байтов, содержащий создаваемое имя -
nameType- Oid, определяющий пространство имён имени, переданного в массиве байтов.nullможет быть использовано для указания того, что каждый механизм, анализирующий массив байтов, должен предполагать собственную синтаксическую форму по умолчанию. - Возвращает:
- GSSName, представляющий указанного принципала
- Выбрасывает:
-
GSSException- содержащий следующие основные коды ошибок:GSSException.BAD_NAMETYPE,GSSException.BAD_NAME,GSSException.BAD_MECH,GSSException.FAILURE - См. также:
createName
public abstract GSSName createName(String nameStr, Oid nameType, Oid mech) throws GSSException
createName и затем также GSSName.canonicalize.- Параметры:
-
nameStr- строка, представляющая печатную форму создаваемого имени. -
nameType- Oid, определяющий пространство имён предоставленного печатного имени.nullможет быть использовано для указания того, что каждый механизм, анализирующий nameStr, должен предполагать собственную печатную форму по умолчанию. Не рекомендуется использовать nametype NT_EXPORT_NAME с этим методом. -
mech- Oid, определяющий механизм, для которого имя должно быть канонизировано - Возвращает:
- GSSName, представляющий указанного принципала
- Выбрасывает:
-
GSSException- содержащий следующие основные коды ошибок:GSSException.BAD_NAMETYPE,GSSException.BAD_NAME,GSSException.BAD_MECH,GSSException.FAILURE - См. также:
createName
public abstract GSSName createName(byte[] name, Oid nameType, Oid mech) throws GSSException
createName и затем также GSSName.canonicalize.- Параметры:
-
name- массив байтов, содержащий создаваемое имя -
nameType- Oid, определяющий пространство имён имени, переданного в массиве байтов.nullможет быть использовано для указания того, что каждый механизм, анализирующий массив байтов, должен предполагать собственную синтаксическую форму по умолчанию. -
mech- Oid, определяющий механизм, для которого имя должно быть канонизировано - Возвращает:
- GSSName, представляющий указанного принципала
- Выбрасывает:
-
GSSException- содержащий следующие основные коды ошибок:GSSException.BAD_NAMETYPE,GSSException.BAD_NAME,GSSException.BAD_MECH,GSSException.FAILURE - См. также:
createCredential
public abstract GSSCredential createCredential(int usage) throws GSSException
- Параметры:
-
usage- Предполагаемое использование этого объекта учетных данных. Значение этого параметра должно быть одним из следующих:GSSCredential.INITIATE_AND_ACCEPT,GSSCredential.ACCEPT_ONLYиGSSCredential.INITIATE_ONLY. - Возвращает:
- GSSCredential запрошенного типа.
- Исключение:
-
GSSException- содержащий следующие основные коды ошибок:GSSException.BAD_MECH,GSSException.BAD_NAMETYPE,GSSException.BAD_NAME,GSSException.CREDENTIALS_EXPIRED,GSSException.NO_CRED,GSSException.FAILURE - См. также:
createCredential
public abstract GSSCredential createCredential(GSSName name, int lifetime, Oid mech, int usage) throws GSSException
Значения срока действия, отличные от значений по умолчанию, не всегда могут быть учтены базовыми механизмами, поэтому приложения должны быть готовы вызвать getRemainingLifetime для полученных учетных данных.
- Параметры:
-
name- имя принципала, для которого необходимо получить учетные данные. Используйтеnullдля указания принципала по умолчанию. -
lifetime- количество секунд, в течение которых учетные данные должны оставаться действительными. ИспользуйтеGSSCredential.INDEFINITE_LIFETIMEдля запроса максимального срока действия учетных данных. ИспользуйтеGSSCredential.DEFAULT_LIFETIMEдля запроса срока действия учетных данных по умолчанию. -
mech- Oid нужного механизма. Используйте(Oid) nullдля запроса механизма по умолчанию. -
usage- Предполагаемое использование этого объекта учетных данных. Значение этого параметра должно быть одним из следующих:GSSCredential.INITIATE_AND_ACCEPT,GSSCredential.ACCEPT_ONLYиGSSCredential.INITIATE_ONLY. - Возвращает:
- GSSCredential запрошенного типа.
- Исключение:
-
GSSException- содержащий следующие основные коды ошибок:GSSException.BAD_MECH,GSSException.BAD_NAMETYPE,GSSException.BAD_NAME,GSSException.CREDENTIALS_EXPIRED,GSSException.NO_CRED,GSSException.FAILURE - См. также:
createCredential
public abstract GSSCredential createCredential(GSSName name, int lifetime, Oid[] mechs, int usage) throws GSSException
GSSCredential.getMechs. Значения срока действия, отличные от значений по умолчанию, не всегда могут быть учтены базовыми механизмами, поэтому приложения должны быть готовы вызвать getRemainingLifetime для полученных учетных данных.
- Параметры:
-
name- имя принципала, для которого необходимо получить учетные данные. Используйтеnullдля указания принципала по умолчанию. -
lifetime- количество секунд, в течение которых учетные данные должны оставаться действительными. ИспользуйтеGSSCredential.INDEFINITE_LIFETIMEдля запроса максимального срока действия учетных данных. ИспользуйтеGSSCredential.DEFAULT_LIFETIMEдля запроса срока действия учетных данных по умолчанию. -
mechs- массив Oid, указывающий механизмы, для которых должны быть получены учетные данные. Используйте(Oid[]) nullдля запроса системного набора механизмов по умолчанию. -
usage- Предполагаемое использование этого объекта учетных данных. Значение этого параметра должно быть одним из следующих:GSSCredential.INITIATE_AND_ACCEPT,GSSCredential.ACCEPT_ONLYиGSSCredential.INITIATE_ONLY. - Возвращает:
- GSSCredential запрошенного типа.
- Исключение:
-
GSSException- содержащий следующие основные коды ошибок:GSSException.BAD_MECH,GSSException.BAD_NAMETYPE,GSSException.BAD_NAME,GSSException.CREDENTIALS_EXPIRED,GSSException.NO_CRED,GSSException.FAILURE - См. также:
createContext
public abstract GSSContext createContext(GSSName peer, Oid mech, GSSCredential myCred, int lifetime) throws GSSException
Значения срока действия, отличные от значений по умолчанию, не всегда могут быть учтены базовым механизмом, поэтому приложения должны быть готовы вызвать getLifetime для полученного контекста.
- Параметры:
-
peer- имя целевого партнера. -
mech- Oid нужного механизма. Используйтеnullдля запроса механизма по умолчанию. -
myCred- учетные данные инициатора. Используйтеnullдля использования принципала-инициатора по умолчанию. -
lifetime- срок действия, в секундах, запрошенный для контекста. ИспользуйтеGSSContext.INDEFINITE_LIFETIMEдля запроса максимального срока действия контекста. ИспользуйтеGSSContext.DEFAULT_LIFETIMEдля запроса срока действия контекста по умолчанию. - Возвращает:
- неустановленный GSSContext
- Исключение:
-
GSSException- содержащий следующие основные коды ошибок:GSSException.NO_CREDGSSException.CREDENTIALS_EXPIREDGSSException.BAD_NAMETYPEGSSException.BAD_MECHGSSException.FAILURE - См. также:
createContext
public abstract GSSContext createContext(GSSCredential myCred) throws GSSException
- Параметры:
-
myCred- учетные данные акцептора. Используйтеnullдля использования принципала-акцептора по умолчанию. - Возвращает:
- неустановленный GSSContext
- Исключение:
-
GSSException- содержащий следующие основные коды ошибок:GSSException.NO_CREDGSSException.CREDENTIALS_EXPIREDGSSException.BAD_MECHGSSException.FAILURE - См. также:
createContext
public abstract GSSContext createContext(byte[] interProcessToken) throws GSSException
Реализации не обязаны поддерживать межпроцессный обмен контекстами безопасности. Перед экспортом контекста, вызов GSSContext.isTransferable укажет, переносим ли контекст. Вызов этого метода в реализации, которая не поддерживает его, приведет к GSSException с кодом ошибки GSSException.UNAVAILABLE.
- Параметры:
-
interProcessToken- токен, ранее выпущенный методом export. - Возвращает:
- ранее установленный GSSContext
- Исключение:
-
GSSException- содержащий следующие основные коды ошибок:GSSException.NO_CONTEXT,GSSException.DEFECTIVE_TOKEN,GSSException.UNAVAILABLE,GSSException.UNAUTHORIZED,GSSException.FAILURE - См. также:
addProviderAtFront
public abstract void addProviderAtFront(Provider p, Oid mech) throws GSSException
Повторный вызов этого метода сохраняет предыдущие настройки, но понижает их приоритет, таким образом формируя упорядоченный список пар "поставщик-механизм", который растёт сверху.
Вызов addProviderAtFront с null-Oid удалит все предыдущие предпочтения, установленные для этого поставщика в экземпляре GSSManager. Вызов addProviderAtFront с не-null-Oid удалит любые предыдущие предпочтения, установленные для этого механизма и этого поставщика.
Если реализация GSSManager не поддерживает SPI с архитектурой подключаемых поставщиков, она должна выбросить GSSException со статусом GSSException.UNAVAILABLE, чтобы указать, что операция недоступна.
Предположим, что приложение желает, чтобы поставщик A всегда проверялся первым при необходимости любого механизма; оно вызовет:
GSSManager mgr = GSSManager.getInstance();
// mgr may at this point have its own pre-configured list
// of provider preferences. The following will prepend to
// any such list:
mgr.addProviderAtFront(A, null);
Теперь, если оно также желает, чтобы механизм Oid m1 всегда получался от поставщика B перед проверкой ранее установленного A, оно вызовет:
mgr.addProviderAtFront(B, m1);
GSSManager сначала проверит B, если нужен m1. Если B не поддерживает m1, GSSManager продолжит проверку с A. Если нужен механизм m2, отличающийся от m1, GSSManager пропустит B и проверит A непосредственно.Предположим, что впоследствии в тот же экземпляр GSSManager выполняется следующий вызов:
mgr.addProviderAtFront(B, null)
тогда предыдущая настройка с парой (B, m1) подразумевается этой настройкой и должна быть удалена. Таким образом, список предпочтений теперь становится {(B, null), (A, null), ... //последующий список предварительно настроенных предпочтений.Однако обратите внимание, что следующий вызов:
mgr.addProviderAtFront(A, m3)
не подразумевает предыдущую настройку (A, null), и список фактически станет {(A, m3), (B, null), (A, null), ...}- Параметры:
-
p- экземпляр поставщика, который должен использоваться всякий раз, когда требуется поддержка для mech. -
mech- механизм, для которого устанавливается поставщик - Исключения:
-
GSSException- содержащий следующие основные коды ошибок:GSSException.UNAVAILABLE,GSSException.FAILURE
addProviderAtEnd
public abstract void addProviderAtEnd(Provider p, Oid mech) throws GSSException
Повторный вызов этого метода сохраняет предыдущие настройки, но поднимает их выше новых в порядке предпочтения, формируя упорядоченный список пар "поставщик-Oid", растущий снизу. Таким образом, более старые настройки поставщика будут использоваться первыми, прежде чем будет использоваться эта.
Если существуют какие-либо ранее существующие предпочтения, конфликтующие с предпочтением, устанавливаемым здесь, то GSSManager должен проигнорировать этот запрос.
Если реализация GSSManager не поддерживает SPI с архитектурой подключаемых поставщиков, она должна выбросить GSSException со статусом GSSException.UNAVAILABLE, чтобы указать, что операция недоступна.
Предположим, что приложение желает, чтобы при необходимости механизма Oid m1 системные поставщики по умолчанию всегда проверялись первыми, а только когда они не поддерживают m1, должен проверяться поставщик A. Тогда оно вызовет:
GSSManager mgr = GSSManager.getInstance();
mgr.addProviderAtEnd(A, m1);
Теперь, если оно также желает, чтобы для всех механизмов поставщик B проверялся после проверки всех настроенных поставщиков, оно вызовет:
mgr.addProviderAtEnd(B, null);
Таким образом, список предпочтений теперь становится {..., (A, m1), (B, null)}.Предположим, что впоследствии в тот же экземпляр GSSManager выполняется следующий вызов:
mgr.addProviderAtEnd(B, m2)
тогда предыдущая настройка с парой (B, null) подразумевается этой настройкой, и поэтому этот запрос должен быть проигнорирован. То же самое произойдёт, если запрос сделан для уже существующих пар (A, m1) или (B, null).Однако обратите внимание, что следующий вызов:
mgr.addProviderAtEnd(A, null)
не подразумевается предыдущей настройкой (A, m1), и список фактически станет {..., (A, m1), (B, null), (A, null)}- Параметры:
-
p- экземпляр поставщика, который должен использоваться всякий раз, когда требуется поддержка для mech. -
mech- механизм, для которого устанавливается поставщик - Исключения:
-
GSSException- содержащий следующие основные коды ошибок:GSSException.UNAVAILABLE,GSSException.FAILURE
© 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/java.security.jgss/org/ietf/jgss/GSSManager.html