Spec-Zone.ru › OpenJDK 17

Интерфейс 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").
Возвращает:
Непустая строка, представляющая имя зарегистрированного механизма IANA.

hasInitialResponse

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

evaluateChallenge

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

isComplete

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

unwrap

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

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

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

wrap

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

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

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

getNegotiatedProperty

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

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

Параметры:
propName - Непустое имя свойства.
Возвращает:
Значение согласованного свойства. Если null, свойство не было согласовано или не применимо к данному механизму.
Исключение:
IllegalStateException - если этот обмен аутентификацией не завершен

dispose

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

© 1993, 2021, 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/17/docs/api/java.security.sasl/javax/security/sasl/SaslClient.html

Spec-Zone.ru

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