Класс SASL
Классы
class | Params |
Публичные типы
enum | AuthCondition { AuthFail , NoMechanism , BadProtocol , BadServer , BadAuth , NoAuthzid , TooWeak , NeedEncrypt , Expired , Disabled , NoUser , RemoteUnavailable } |
enum | AuthFlags { AuthFlagsNone = 0x00 , AllowPlain = 0x01 , AllowAnonymous = 0x02 , RequireForwardSecrecy = 0x04 , RequirePassCredentials = 0x08 , RequireMutualAuth = 0x10 , RequireAuthzidSupport = 0x20 } |
enum | ClientSendMode { AllowClientSendFirst , DisableClientSendFirst } |
enum | Error { ErrorInit , ErrorHandshake , ErrorCrypt } |
enum | ServerSendMode { AllowServerSendLast , DisableServerSendLast } |
Сигналы
void | authCheck (const QString &user, const QString &authzid) |
void | authenticated () |
void | clientStarted (bool clientInit, const QByteArray &clientInitData) |
void | needParams (const QCA::SASL::Params ¶ms) |
void | nextStep (const QByteArray &stepData) |
void | serverStarted () |
Сигналы, унаследованные от QCA::SecureLayer
void | closed () |
void | error () |
void | readyRead () |
void | readyRead () |
Публичные функции
AuthCondition | authCondition () const |
int | bytesAvailable () const override |
int | bytesOutgoingAvailable () const override |
void | continueAfterAuthCheck () |
void | continueAfterParams () |
int | convertBytesWritten (qint64 encryptedBytes) override |
Error | errorCode () const |
QString | mechanism () const |
QStringList | mechanismList () const |
void | putServerFirstStep (const QString &mech) |
void | putServerFirstStep (const QString &mech, const QByteArray &clientInit) |
void | putStep (const QByteArray &stepData) |
QByteArray | read () override |
QByteArray | readOutgoing (int *plainBytes=nullptr) override |
QStringList | realmList () const |
void | reset () |
SASL (QObject *parent=nullptr, const QString &provider=QString()) | |
void | setAuthzid (const QString &auth) |
void | setConstraints (AuthFlags f, int minSSF, int maxSSF) |
void | setConstraints (AuthFlags f, SecurityLevel s=SL_None) |
void | setExternalAuthId (const QString &authid) |
void | setExternalSSF (int strength) |
void | setLocalAddress (const QString &addr, quint16 port) |
void | setPassword (const SecureArray &pass) |
void | setRealm (const QString &realm) |
void | setRemoteAddress (const QString &addr, quint16 port) |
void | setUsername (const QString &user) |
int | ssf () const |
void | startClient (const QString &service, const QString &host, const QStringList &mechlist, ClientSendMode mode=AllowClientSendFirst) |
void | startServer (const QString &service, const QString &host, const QString &realm, ServerSendMode mode=DisableServerSendLast) |
void | write (const QByteArray &a) override |
void | writeIncoming (const QByteArray &a) override |
Публичные функции, унаследованные от QCA::SecureLayer
virtual void | close () |
virtual bool | isClosable () const |
virtual QByteArray | readUnprocessed () |
SecureLayer (QObject *parent=nullptr) |
Публичные функции, унаследованные от QCA::Algorithm
Algorithm (const Algorithm &from) | |
void | change (const QString &type, const QString &provider) |
void | change (Provider::Context *c) |
Provider::Context * | context () |
const Provider::Context * | context () const |
Algorithm & | operator= (const Algorithm &from) |
Provider * | provider () const |
Provider::Context * | takeContext () |
QString | type () const |
Дружественные функции и классы
class | Private |
Дополнительные унаследованные члены
Защищённые функции, унаследованные от QCA::Algorithm
Algorithm () |
Algorithm (const QString &type, const QString &provider) |
Подробное описание
Реализация протокола простого уровня аутентификации и безопасности (SASL
).
Этот класс реализует протокол простого уровня аутентификации и безопасности, который описан в RFC2222 . См. http://www.ietf.org/rfc/rfc2222.txt.
Как следует из названия, SASL обеспечивает аутентификацию (например, «логин» в некоторой форме) для протокола, ориентированного на соединение, а также может обеспечивать защиту для последующего соединения.
Протокол SASL
разработан с возможностью расширения с помощью ряда «механизмов», где механизм
является фактическим методом аутентификации. Примеры механизмов включают Anonymous, LOGIN, Kerberos
V4 и GSSAPI. Механизмы могут быть добавлены (возможно, без перезапуска серверного приложения)
системным администратором.
Важно понимать, что SASL
не принимает участие ни в работе сети, ни в работе протокола. Это
означает, что SASL
не имеет сведений, как клиент подключается к серверу, и не понимает
фактический протокол приложения.
Примеры
saslclient.cpp и saslserver.cpp.
Описание перечислений
Error
enum QCA::SASL::Error |
Возможные ошибки, которые могут возникнуть при использовании SASL
.
ErrorInit |
Проблема с запуском SASL |
ErrorHandshake |
Проблема во время процесса аутентификации |
ErrorCrypt |
Проблема в любое время после |
AuthCondition
enum QCA::SASL::AuthCondition |
Возможные состояния ошибки аутентификации.
AuthFail |
Общая ошибка аутентификации |
NoMechanism |
Нет совместимого/подходящего механизма аутентификации |
BadProtocol |
Протокол неверен или отменён |
BadServer |
Ошибка взаимной аутентификации сервера (только на стороне клиента) |
BadAuth |
Ошибка аутентификации (только на стороне сервера) |
NoAuthzid |
Ошибка авторизации (только на стороне сервера) |
TooWeak |
Механизм слишком слабый для этого пользователя (только на стороне сервера) |
NeedEncrypt |
Для использования механизма необходимо шифрование (только на стороне сервера) |
Expired |
Срок действия кодовой фразы истёк, её необходимо сбросить (только на стороне сервера) |
Disabled |
Учётная запись отключена (только на стороне сервера) |
NoUser |
Пользователь не найден (только на стороне сервера) |
RemoteUnavailable |
Удалённая служба, необходимая для аутентификации, исчезла (только на стороне сервера) |
AuthFlags
enum QCA::SASL::AuthFlags |
Значения флагов требований аутентификации.
ClientSendMode
enum QCA::SASL::ClientSendMode |
Параметры режима для отправки на стороне клиента.
ServerSendMode
enum QCA::SASL::ServerSendMode |
Параметры режима для отправки на стороне сервера.
Описание конструкторов и деструктора
SASL()
QCA::SASL::SASL (QObject * parent = nullptr, const QString & provider = QString() ) | explicit |
Стандартный конструктор.
Параметры
parent | Родительский объект для этого SASL-соединения |
provider | Используемый криптопровайдер, если указан. Если аргумент не указан или указан как пустой, то приемлем любой криптопровайдер |
Описание методов
reset()
void QCA::SASL::reset () |
Сбрасывает механизм SASL
.
setConstraints() [1/2]
void QCA::SASL::setConstraints (AuthFlags f, SecurityLevel s = SL_None ) |
Задаёт ограничения подключения.
SASL
поддерживает ряд требований аутентификации и ряд уровней безопасности. Этот метод позволяет
указать требования для подключения.
Параметры
f | Требования к аутентификации, которые обычно создаются с помощью бинарной функции ИЛИ (например, AllowPlain | AllowAnonymous) |
s | Уровень безопасности шифрования, если он используется. См. SecurityLevel для получения подробной информации о том, что предоставляет собой каждый уровень |
Примеры
saslclient.cpp и saslserver.cpp.
setConstraints() [2/2]
void QCA::SASL::setConstraints (AuthFlags f, int minSSF, int maxSSF ) |
Это перегруженная функция, предоставленная для удобства. Она отличается от вышеупомянутого метода только тем, какие аргументы она принимает. Если нет конкретной причины для прямого указания коэффициента мощности, вероятно, следует использовать описанный выше метод.
Параметры
f | Требования к аутентификации, которые обычно создаются с помощью бинарной функции ИЛИ (например, AllowPlain | AllowAnonymous) |
minSSF | Минимальный коэффициент силы безопасности, который требуется |
maxSSF | Максимальный коэффициент силы безопасности, который требуется |
Примечание.
Факторы силы безопасности — это грубое приближение к длине ключа в функции шифрования (например,
если защита обеспечивается с помощью простого DES, коэффициент силы безопасности будет равен
56
).
setLocalAddress()
void QCA::SASL::setLocalAddress (const QString & addr, quint16port ) |
Задаёт локальный адрес.
Параметры
addr | Адрес локальной части подключения |
port | Номер порта локальной части соединения |
setRemoteAddress()
void QCA::SASL::setRemoteAddress (const QString & addr, quint16port ) |
Задаёт адрес второго участника.
Параметры
addr | Адрес второй стороны соединения |
port | Номер порта второй стороны соединения |
setExternalAuthId()
void QCA::SASL::setExternalAuthId (const QString & authid) |
Задаёт идентификатор защищённого извне соединения.
Параметры
authid | Идентификатор соединения |
setExternalSSF()
void QCA::SASL::setExternalSSF (int strength) |
Задаёт коэффициент силы безопасности для подключения с внешней защитой.
Параметры
strength | Коэффициент надёжности соединения |
startClient()
void QCA::SASL::startClient (const QString & service, const QString & host, const QStringList & mechlist, ClientSendMode mode = AllowClientSendFirst) |
Инициализирует клиентскую сторону соединения.
startClient
должен вызываться на стороне клиента соединения. clientStarted
будет испущен
после завершения операции.
Параметры
service | Название службы |
host | Имя хоста на стороне клиента |
mechlist | Список механизмов, которые можно использовать |
mode | Режим для использования на стороне клиента |
Примеры
startServer()
void QCA::SASL::startServer (const QString & service, const QString & host, const QString & realm, ServerSendMode mode = DisableServerSendLast) |
Инициализирует серверную часть соединения.
startClient
должен вызываться на серверной стороне соединения. serverStarted
будет испущен
после завершения операции.
Параметры
service | Название службы |
host | Имя хоста на стороне сервера |
realm | Область для использования |
mode | Режим для использования на стороне сервера |
Примеры
putServerFirstStep() [1/2]
void QCA::SASL::putServerFirstStep (const QString & mech) |
Обрабатывает первый шаг в режиме сервера (server
).
Этот метод нужно вызывать с помощью механизма, выбранного клиентом. Если есть начальные данные клиента, вместо него следует вызвать другую версию метода.
Параметры
mech | Механизм для использования |
Примеры
putServerFirstStep() [2/2]
void QCA::SASL::putServerFirstStep (const QString & mech, const QByteArray & clientInit ) |
Обрабатывает первый шаг в режиме сервера (server
).
Этот метод нужно вызывать с помощью механизма, выбранного клиентом, и с исходными клиентскими данными. Если нет исходных данных клиента, вместо него следует вызвать другую версию метода.
Параметры
mech | Механизм для использования |
clientInit | Исходные данные от клиента |
putStep()
void QCA::SASL::putStep (const QByteArray & stepData) |
Обрабатывает шаг аутентификации.
Метод нужно вызывать это с данными аутентификации, полученными из сети. Единственное исключение —
это первый шаг в режиме сервера, и в этом случае необходимо вызвать putServerFirstStep
.
Параметры
stepData | Данные аутентификации из сети |
Примеры
saslclient.cpp и saslserver.cpp.
mechanism()
QString QCA::SASL::mechanism () const |
Возвращает выбранный механизм (client
).
Примеры
mechanismList()
QStringList QCA::SASL::mechanismList () const |
Возвращает список механизмов (server
).
Примеры
realmList()
QStringList QCA::SASL::realmList () const |
Возвращает список областей, если он доступен (client
).
Примеры
ssf()
int QCA::SASL::ssf () const |
Возвращает коэффициент надёжности соединения.
Примеры
saslclient.cpp и saslserver.cpp.
errorCode()
Error QCA::SASL::errorCode () const |
Возвращает код ошибки.
Примеры
saslclient.cpp и saslserver.cpp.
authCondition()
AuthCondition QCA::SASL::authCondition () const |
Возвращает причину сбоя аутентификации.
Примеры
saslclient.cpp и saslserver.cpp.
setUsername()
void QCA::SASL::setUsername (const QString & user) |
Задаёт имя пользователя для использования при аутентификации.
Параметры
user | Имя пользователя для использования |
Примеры
setAuthzid()
void QCA::SASL::setAuthzid (const QString & auth) |
Задаёт идетичность для авторизации для использования при проверке подлинности.
Параметры
auth | Идентичность для авторизации |
Примеры
setPassword()
void QCA::SASL::setPassword (const SecureArray & pass) |
Задаёт пароль для использования при аутентификации.
Параметры
pass | Пароль для использования |
Примеры
setRealm()
void QCA::SASL::setRealm (const QString & realm) |
Задаёт область для использования при аутентификации.
Параметры
realm | Область для использования |
Примеры
continueAfterParams()
void QCA::SASL::continueAfterParams () |
Продолжает переговоры после установки параметров (client
).
Примеры
continueAfterAuthCheck()
void QCA::SASL::continueAfterAuthCheck () |
Продолжает согласование после проверки идентификаторов авторизации (сервер).
Примеры
bytesAvailable()
int QCA::SASL::bytesAvailable () const | override virtual |
Возвращает количество байтов, доступных для получения с помощью метода read() на стороне приложения.
Реализует QCA::SecureLayer.
bytesOutgoingAvailable()
int QCA::SASL::bytesOutgoingAvailable () const | override virtual |
Возвращает количесто байтов, доступных для чтения с помощью метода readOutgoing() на стороне сетевого взаимодействия.
Реализует QCA::SecureLayer.
write()
void QCA::SASL::write (const QByteArray & a) | override virtual |
Метод записывает незашифрованные данные в объект, реализующий интерфейс SecureLayer.
Обычно данный метод вызывается на стороне приложения.
Параметры
a | Источник данных со стороны приложения |
Реализует QCA::SecureLayer.
Примеры
saslclient.cpp и saslserver.cpp.
read()
QByteArray QCA::SASL::read () | override virtual |
Метод считывает расшифрованные данные из объекта, реализующего интерфейс SecureLayer.
Обычно данный метод вызывается на стороне приложения после получения сигнала readyRead().
Реализует QCA::SecureLayer.
Примеры
saslclient.cpp и saslserver.cpp.
writeIncoming()
void QCA::SASL::writeIncoming (const QByteArray & a) | override virtual |
Метод принимает закодированные (обычно зашифрованные) данные для обработки.
Обычно данный метод вызывается после получения информации из сетевого сокета, например, через
использование метода QTcpSocket::readAll()
. Чтение из сокета осуществляется после получения
сигнала о том, что в нём доступны данные для чтения.
Параметры
a | Массив ByteArray , из которого получаются данные со стороны сетевого взаимодействия |
Реализует QCA::SecureLayer.
Примеры
readOutgoing()
QByteArray QCA::SASL::readOutgoing (int * plainBytes = nullptr) | override virtual |
Метод предоставляет закодированные (обычно зашифрованные) данные.
Обычно данный метод вызывается, чтобы получить данные для записи в сетевой сокет, например для
передачи в QTcepSocker::write()
. Данный метод обычно вызывается после получения сигнала
readyReadOutgoing().
Параметры
plainBytes | Количество прочитанных байтов |
Реализует QCA::SecureLayer.
Примеры
saslclient.cpp и saslserver.cpp.
convertBytesWritten()
int QCA::SASL::convertBytesWritten (qint64encryptedBytes) | override virtual |
Преобразует уже записанные зашифрованные байты в байты простого текста.
Параметры
encryptedBytes | Количество байтов для преобразования |
Реализует QCA::SecureLayer.
Примеры
clientStarted
void QCA::SASL::clientStarted (bool clientInit, const QByteArray & clientInitData ) | signal |
Сигнал испускается, когда клиент был успешно запущен.
Параметры
clientInit | True , если клиент должен отправить первоначальный ответ серверу |
clientInitData | Начальный ответ для отправки на сервер. Следует обратить внимание, что в SASL существует разница между пустым начальным ответом и отсутствием начального ответа, и поэтому, даже если clientInitData является пустым массивом, всё равно нужно отправить начальный ответ, если clientInit имеет значение true . |
Примеры
serverStarted
void QCA::SASL::serverStarted () | signal |
Сигнал испускается после успешного запуска сервера.
Примеры
nextStep
void QCA::SASL::nextStep (const QByteArray & stepData) | signal |
Сигнал испускается, когда есть данные, которые необходимо отправить по сети для завершения следующего шага в процессе аутентификации.
Параметры
stepData | Данные для отправки по сети |
Примеры
saslclient.cpp и saslserver.cpp.
needParams
void QCA::SASL::needParams (const QCA::SASL::Params & params) | signal |
Сигнал испускается, когда клиенту требуются дополнительные параметры.
После получения этого сигнала приложение должно соответствующим образом установить требуемые значения параметров и затем вызвать continueAfterParams().
Параметры
params | Параметры, которые требуются клиенту |
Примеры
authCheck
void QCA::SASL::authCheck (const QString & user, const QString & authzid ) | signal |
Сигнал испускается, когда серверу необходимо выполнить проверку аутентификации.
Если пользователь и authzid
действительны, следует вызвать
continueAfterAuthCheck().
Параметры
user | Идентификационное имя пользователя |
authzid | Имя пользователя для авторизации |
Примеры
authenticated
void QCA::SASL::authenticated () | signal |
Сигнал испускается после завершения аутентификации.