Интерфейс 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, если аутентификация выполнена успешно и нет больше данных вызова, которые нужно отправить клиенту.
- Исключения:
-
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, 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.
https://docs.oracle.com/en/java/javase/11/docs/api/java.security.sasl/javax/security/sasl/SaslServer.html