Spec-Zone.ru › OpenJDK 21

Интерфейс SaslClient

public interface SaslClient
Выполняет аутентификацию SASL в качестве клиента.

Библиотека протокола, например, для LDAP, получает экземпляр этого класса для выполнения аутентификации, определённой конкретным механизмом SASL. Вызов методов экземпляра SaslClient обрабатывает запросы и создаёт ответы в соответствии с механизмом SASL, реализованным SaslClient. По мере прохождения аутентификации экземпляр инкапсулирует состояние обмена аутентификацией клиента SASL.

Вот пример того, как библиотека LDAP может использовать SaslClient. Сначала она получает экземпляр SaslClient:


 SaslClient sc = Sasl.createSaslClient(mechanisms,
     authorizationId, protocol, serverName, props, callbackHandler);
 
После этого она может продолжить использование клиента для аутентификации. Например, библиотека LDAP может использовать клиент следующим образом:

 // Get initial response and send to server
 byte[] response = (sc.hasInitialResponse() ? sc.evaluateChallenge(new byte[0]) :
     null);
 LdapResult res = ldap.sendBindRequest(dn, sc.getName(), response);
 while (!sc.isComplete() &&
     (res.status == SASL_BIND_IN_PROGRESS || res.status == SUCCESS)) {
     response = sc.evaluateChallenge(res.getBytes());
     if (res.status == SUCCESS) {
         // we're done; don't expect to send another BIND
         if (response != null) {
             throw new SaslException(
                 "Protocol error: attempting to send response after completion");
         }
         break;
     }
     res = ldap.sendBindRequest(dn, sc.getName(), response);
 }
 if (sc.isComplete() && res.status == SUCCESS) {
    String qop = (String) sc.getNegotiatedProperty(Sasl.QOP);
    if (qop != null
        && (qop.equalsIgnoreCase("auth-int")
            || qop.equalsIgnoreCase("auth-conf"))) {

      // Use SaslClient.wrap() and SaslClient.unwrap() for future
      // communication with server
      ldap.in = new SecureInputStream(sc, ldap.in);
      ldap.out = new SecureOutputStream(sc, ldap.out);
    }
 }
 
Если у механизма есть начальный ответ, библиотека вызывает evaluateChallenge() с пустым запросом, чтобы получить начальный ответ. Протоколы, такие как IMAP4, которые не включают начальный ответ в свой первый командный запрос аутентификации на сервер, начинают аутентификацию без предварительного вызова hasInitialResponse() или evaluateChallenge(). Когда сервер отвечает на команду, он отправляет начальный запрос. Для механизма SASL, в котором клиент отправляет данные первым, сервер должен отправить запрос без данных. В результате будет вызван метод evaluateChallenge() (на клиенте) с пустым запросом.
Since:
1.5
See Also:
  • Sasl
  • SaslClientFactory

Краткое описание методов

Модификатор и тип Метод Описание
void dispose()
Освобождает любые системные ресурсы или конфиденциальную информацию безопасности, которые может использовать SaslClient.
byte[] evaluateChallenge(byte[] challenge)
Оценивает данные запроса и генерирует ответ.
String getMechanismName()
Возвращает имя зарегистрированного IANA механизма этого клиента SASL.
Object getNegotiatedProperty(String propName)
Получает согласованное свойство.
boolean hasInitialResponse()
Определяет, имеет ли этот механизм необязательный начальный ответ.
boolean isComplete()
Определяет, завершён ли обмен аутентификацией.
byte[] unwrap(byte[] incoming, int offset, int len)
Расшифровывает массив байтов, полученный от сервера.
byte[] wrap(byte[] outgoing, int offset, int len)
Заворачивает массив байтов для отправки на сервер.

Подробное описание методов

getMechanismName

String getMechanismName()
Возвращает имя зарегистрированного IANA механизма этого клиента SASL. (например, "CRAM-MD5", "GSSAPI").
Returns:
Непустая строка, представляющая имя зарегистрированного IANA механизма.

hasInitialResponse

boolean hasInitialResponse()
Определяет, имеет ли этот механизм необязательный начальный ответ. Если true, вызывающий метод должен вызвать evaluateChallenge() с пустым массивом, чтобы получить начальный ответ.
Returns:
true, если у этого механизма есть начальный ответ.

evaluateChallenge

byte[] evaluateChallenge(byte[] challenge) throws SaslException
Оценивает данные запроса и генерирует ответ. Если во время процесса аутентификации от сервера получен запрос, этот метод вызывается для подготовки соответствующего следующего ответа, который необходимо отправить на сервер.
Parameters:
challenge - Непустой запрос, отправленный сервером. Массив запроса может иметь нулевую длину.
Returns:
Возможный ответ, который необходимо отправить серверу. Он равен null, если запрос сопровождался статусом "SUCCESS" и запрос содержит только данные для обновления состояния клиента, и ответ на сервер отправлять не нужно. Ответ имеет нулевую длину, если клиент должен отправить ответ без данных.
Throws:
SaslException - Если во время обработки запроса или генерации ответа произошла ошибка.

isComplete

boolean isComplete()
Определяет, завершён ли обмен аутентификацией. Этот метод можно вызывать в любое время, но обычно его вызывают после получения указаний от сервера (способом, специфичным для протокола) о том, что обмен завершён.
Returns:
true, если обмен аутентификацией завершён; false в противном случае.

unwrap

byte[] unwrap(byte[] incoming, int offset, int len) throws SaslException
Расшифровывает массив байтов, полученный от сервера. Этот метод может быть вызван только после завершения обмена аутентификацией (т.е., когда isComplete() возвращает true) и только если обмен аутентификацией согласовал целостность и/или конфиденциальность как качество защиты; в противном случае выбрасывается IllegalStateException.

incoming — содержимое буфера SASL, как определено в RFC 2222 без начального четырёхбайтового поля, представляющего длину. offset и len задают часть incoming для использования.

Parameters:
incoming - Непустой массив байтов, содержащий закодированные байты с сервера.
offset - Начальная позиция в incoming байтов для использования.
len - Количество байтов с incoming для использования.
Returns:
Непустой массив байтов, содержащий декодированные байты.
Throws:
SaslException - если incoming не может быть успешно расшифрован.
IllegalStateException - если обмен аутентификацией не завершен, или если согласованное качество защиты не включает целостность и конфиденциальность.

wrap

byte[] wrap(byte[] outgoing, int offset, int len) throws SaslException
Заворачивает массив байтов для отправки на сервер. Этот метод может быть вызван только после завершения обмена аутентификацией (т.е., когда isComplete() возвращает true) и только если обмен аутентификацией согласовал целостность и/или конфиденциальность как качество защиты; в противном случае выбрасывается IllegalStateException.

Результат этого метода составит содержимое буфера SASL, как определено в RFC 2222 без начального четырёхбайтового поля, представляющего длину. offset и len задают часть outgoing для использования.

Parameters:
outgoing - Непустой массив байтов, содержащий байты для кодирования.
offset - Начальная позиция в outgoing байтов для использования.
len - Количество байтов с outgoing для использования.
Returns:
Непустой массив байтов, содержащий закодированные байты.
Throws:
SaslException - если outgoing не может быть успешно зашифрован.
IllegalStateException - если обмен аутентификацией не завершен, или если согласованное качество защиты не включает целостность и конфиденциальность.

getNegotiatedProperty

Object getNegotiatedProperty(String propName)
Получает согласованное свойство. Этот метод может быть вызван только после завершения обмена аутентификацией (т.е., когда isComplete() возвращает true); в противном случае выбрасывается IllegalStateException.

Класс Sasl включает несколько известных имён свойств (например, Sasl.QOP). SASL-провайдер может поддерживать другие свойства, специфичные для поставщика и/или механизма.

Parameters:
propName - Непустое имя свойства.
Returns:
Значение согласованного свойства. Если null, свойство не было согласовано или не применимо к этому механизму.
Throws:
IllegalStateException - если обмен аутентификацией не завершён

dispose

void dispose() throws SaslException
Освобождает любые системные ресурсы или конфиденциальную информацию безопасности, которые может использовать SaslClient. Вызов этого метода делает экземпляр SaslClient недействительным. Этот метод идемпотентен.
Throws:
SaslException - Если при освобождении ресурсов возникла проблема.

© 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/java.security.sasl/javax/security/sasl/SaslClient.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API