Интерфейс SaslClient
public interface SaslClient
Библиотека протокола, например, для LDAP, получает экземпляр этого класса для выполнения аутентификации, определённой конкретным механизмом SASL. Вызов методов экземпляра SaslClient обрабатывает запросы и создаёт ответы в соответствии с механизмом SASL, реализованным SaslClient. По мере прохождения аутентификации экземпляр инкапсулирует состояние обмена аутентификацией клиента SASL.
Вот пример того, как библиотека LDAP может использовать SaslClient. Сначала она получает экземпляр SaslClient:
После этого она может продолжить использование клиента для аутентификации. Например, библиотека LDAP может использовать клиент следующим образом:SaslClient sc = Sasl.createSaslClient(mechanisms, authorizationId, protocol, serverName, props, callbackHandler);
Если у механизма есть начальный ответ, библиотека вызывает// 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:
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
void |
dispose() |
Освобождает любые системные ресурсы или конфиденциальную информацию безопасности, которые может использовать SaslClient. |
byte[] |
evaluateChallenge |
Оценивает данные запроса и генерирует ответ. |
String |
getMechanismName() |
Возвращает имя зарегистрированного IANA механизма этого клиента SASL. |
Object |
getNegotiatedProperty |
Получает согласованное свойство. |
boolean |
hasInitialResponse() |
Определяет, имеет ли этот механизм необязательный начальный ответ. |
boolean |
isComplete() |
Определяет, завершён ли обмен аутентификацией. |
byte[] |
unwrap |
Расшифровывает массив байтов, полученный от сервера. |
byte[] |
wrap |
Заворачивает массив байтов для отправки на сервер. |
Подробное описание методов
getMechanismName
String getMechanismName()
- Returns:
- Непустая строка, представляющая имя зарегистрированного IANA механизма.
hasInitialResponse
boolean hasInitialResponse()
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
- 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