Интерфейс 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() с пустым запросом.- С момента:
- 1.5
- См. также:
-
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.
- Параметры:
-
propName- Имя непустого свойства. - Возвращает:
- Значение согласованного свойства. Если null, свойство не было согласовано или не применимо к этому механизму.
- Исключения:
-
IllegalStateException- если этот обмен аутентификации не завершен
dispose
void dispose()
throws SaslException Освобождает любые системные ресурсы или конфиденциальную информацию, которые SaslClient может использовать. Вызов этого метода делает экземпляр SaslClient недействительным. Этот метод идемпотентен.
- Исключения:
-
SaslException- Если при освобождении ресурсов возникла проблема.
© 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.