Spec-Zone.ru › OpenJDK 25

Интерфейс SaslServer

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

Сервер, например сервер LDAP, получает экземпляр этого класса для выполнения аутентификации, определённой конкретным механизмом SASL. Вызов методов экземпляра SaslServer генерирует запросы в соответствии с механизмом SASL, реализованным в SaslServer. По мере выполнения аутентификации экземпляр хранит состояние обмена данными при аутентификации на сервере 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);
    }
}
Начиная с:
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()
Возвращает зарегистрированное в IANA имя механизма этого сервера SASL (например, "CRAM-MD5", "GSSAPI").
Возвращает:
Ненулевую строку, представляющую зарегистрированное в IANA имя механизма.

evaluateResponse

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

Сообщить об ошибке или предложить улучшение
Дополнительную справочную информацию по API и документацию для разработчиков см. в разделе Документация Java SE, содержащем более подробные описания для разработчиков, концептуальные обзоры, определения терминов, обходные решения и примеры работающего кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или её аффилированных лиц в США и других странах.
Авторское право © 1993, 2025, Oracle и/или её аффилированные лица, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

© 1993, 2025, 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/25/docs/api/java.security.sasl/javax/security/sasl/SaslServer.html

Spec-Zone.ru

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