Spec-Zone.ru › OpenJDK 17

Интерфейс SaslServer

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

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

Вот пример того, как сервер LDAP может использовать SaslServer. Сначала он получает экземпляр SaslServer для механизма SASL, запрошенного клиентом:

 SaslServer ss = Sasl.createSaslServer(mechanism,
     "ldap", myFQDN, props, callbackHandler);
 
Затем он может приступить к использованию сервера для аутентификации. Например, предположим, что сервер LDAP получил запрос LDAP BIND, содержащий имя механизма SASL и (необязательный) начальный ответ. Тогда он может использовать сервер следующим образом:

 while (!ss.isComplete()) {
     try {
         byte[] challenge = ss.evaluateResponse(response);
         if (ss.isComplete()) {
             status = ldap.sendBindResponse(mechanism, challenge, SUCCESS);
         } else {
             status = ldap.sendBindResponse(mechanism, challenge,
                 SASL_BIND_IN_PROGRESS);
             response = ldap.readBindRequest();
         }
     } catch (SaslException e) {
         status = ldap.sendErrorResponse(e);
         break;
     }
 }
 if (ss.isComplete() && status == SUCCESS) {
     String qop = (String) sc.getNegotiatedProperty(Sasl.QOP);
     if (qop != null
         && (qop.equalsIgnoreCase("auth-int")
             || qop.equalsIgnoreCase("auth-conf"))) {

         // Use SaslServer.wrap() and SaslServer.unwrap() for future
         // communication with client
         ldap.in = new SecureInputStream(ss, ldap.in);
         ldap.out = new SecureOutputStream(ss, ldap.out);
     }
 }
 
Since:
1.5
См. также:
  • Sasl
  • SaslServerFactory

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

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

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

getMechanismName

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

evaluateResponse

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

isComplete

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

getAuthorizationID

String getAuthorizationID()
Сообщает об идентификаторе авторизации, действующем для клиента этой сессии. Этот метод можно вызывать только в том случае, если isComplete() возвращает true.
Возвращает:
Идентификатор авторизации клиента.
Выбрасывает:
IllegalStateException - если эта сессия аутентификации не завершена

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) и только в том случае, если обмен данными аутентификации согласовал целостность и/или конфиденциальность как качество защиты; в противном случае выбрасывается SaslException.

Результат этого метода будет составлять содержимое буфера 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
Освобождает системные ресурсы или конфиденциальную информацию безопасности, которые может использовать SaslServer. Вызов этого метода делает экземпляр SaslServer недействительным. Данный метод идемпотентен.
Исключения:
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/SaslServer.html

Spec-Zone.ru

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