Spec-Zone .ru
спецификации, руководства, описания, API
|
public interface SaslClient
Библиотека протокола такой как один для LDAP приводит экземпляр в порядок этого класса, чтобы выполнить аутентификацию, определенную определенным механизмом SASL. Вызов методов на экземпляре SaslClient обрабатывает проблемы и создает ответы согласно механизму SASL, реализованному SaslClient. Поскольку аутентификация продолжается, экземпляр инкапсулирует состояние обмена аутентификации клиента SASL.
Вот пример того, как библиотека LDAP могла бы использовать SaslClient. Это сначала получает экземпляр SaslClient:
Это может тогда продолжиться, чтобы использовать клиент для аутентификации. Например, библиотека LDAP могла бы использовать клиент следующим образом:SaslClient sc = Sasl.createSaslClient(mechanisms, authorizationId, protocol, serverName, props, callbackHandler);
Если у механизма есть начальный ответ, библиотека вызывает evaluateChallenge() с пустой проблемой и получить начальный ответ. Протоколы, такие как IMAP4, которые не включают начальный ответ с их первой командой аутентификации к серверу, инициируют аутентификацию без первого вызова hasInitialResponse() или evaluateChallenge(). Когда сервер отвечает на команду, он отправляет начальную проблему. Для механизма SASL, в котором клиент отправляет данные сначала, сервер должен был выпустить проблему без данных. Это тогда приведет к вызову (на клиенте) к evaluateChallenge() с пустой проблемой.// 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); } }
Sasl
, SaslClientFactory
Модификатор и Тип | Метод и Описание |
---|---|
void |
dispose()
Избавляется от любых системных ресурсов или уязвимой информации безопасности, которую мог бы использовать SaslClient.
|
byte[] |
evaluateChallenge(byte[] challenge)
Оценивает данные проблемы и генерирует ответ.
|
Строка |
getMechanismName()
Возвращает зарегистрированное в IANA имя механизма этого клиента SASL.
|
Объект |
getNegotiatedProperty(String propName)
Получает согласованное свойство.
|
boolean |
hasInitialResponse()
Определяет, есть ли у этого механизма дополнительный начальный ответ.
|
boolean |
isComplete()
Определяет, завершился ли обмен аутентификации.
|
byte[] |
unwrap(byte[] incoming, int offset, int len)
Разворачивает байтовый массив, полученный от сервера.
|
byte[] |
wrap(byte[] outgoing, int offset, int len)
Обертывает байтовый массив, который будет отправлен серверу.
|
String getMechanismName()
boolean hasInitialResponse()
byte[] evaluateChallenge(byte[] challenge) throws SaslException
challenge
- Ненулевая проблема передалась от сервера. У массива проблемы может быть нулевая длина.SaslException
- Если ошибка произошла, обрабатывая проблему или генерируя ответ.boolean isComplete()
byte[] unwrap(byte[] incoming, int offset, int len) throws SaslException
incoming является содержанием буфера SASL как определено в RFC 2222 без продвижения четырех полей октета, которые представляют длину. offset и len определяют часть incoming, чтобы использовать.
incoming
- Ненулевой байтовый массив, содержащий закодированные байты от сервера.offset
- Стартовая позиция в incoming байтов, чтобы использовать.len
- Число байтов от incoming, чтобы использовать.SaslException
- если incoming не может быть успешно развернут.IllegalStateException
- если обмен аутентификации не завершился, или если у согласованного качества защиты нет ни целостности, ни конфиденциальности.byte[] wrap(byte[] outgoing, int offset, int len) throws SaslException
Результат этого метода составит содержание буфера SASL как определено в RFC 2222 без продвижения четырех полей октета, которые представляют длину. offset и len определяют часть outgoing, чтобы использовать.
outgoing
- Ненулевой байтовый массив, содержащий байты, чтобы закодировать.offset
- Стартовая позиция в outgoing байтов, чтобы использовать.len
- Число байтов от outgoing, чтобы использовать.SaslException
- если outgoing не может быть успешно обернут.IllegalStateException
- если обмен аутентификации не завершился, или если у согласованного качества защиты нет ни целостности, ни конфиденциальности.Object getNegotiatedProperty(String propName)
propName
- Ненулевое имя свойства.IllegalStateException
- если этот обмен аутентификации не завершилсяvoid dispose() throws SaslException
SaslException
- Если с проблемой встретились, располагая ресурсы.
Для дальнейшей ссылки API и документации разработчика, см.
Авторское право © 1993, 2011, Oracle и/или его филиалы. Все права защищены.