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