AUTHENTICATE
{механизм
} [начальные данные
]
Команда AUTHENTICATE определяет механизм аутентификации SASL (RFC 4422). Если сервер поддерживает запрошенный механизм, он выполняет обмен данными протокола аутентификации для идентификации и аутентификации пользователя. Если запрошенный механизм аутентификации не поддерживается, то сервер отклоняет команду AUTHENTICATE отправляя ответ NO. Список доступных механизмов объявляется в возможности SASL.
Обмен протокола аутентификации состоит из серии запросов (challenges) сервера и ответов клиента, которые специфичны для выбранного механизма аутентификации. Запрос сервера состоит из литеральной строки за которой следует CRLF. Содержимое строки представляет собой данные SASL закодированные в base-64. Ответ клиента состоит из строки (как токен, в кавычках или литеральной) данных SASL закодированной в base-64 за которой следует CRLF. Если клиент хочет отменить обмен данными аутентификации, он отправляет строку содержащую один символ "*". Если сервер получает такой ответ, он отклоняет команду AUTHENTICATE отправив ответ NO.
Необязательный аргумент с начальными данными команды AUTHENTICATE используется для сокращения количества обмена данными если выбранный механизм аутентификации предусматривает начальную отправку данных клиентом.
Если выполнение команды AUTHENTICATE завершилось ответом сервера
NO (UNSUPPORTED) "Unsupported authorization
mechanism"
, то клиент может попробовать другой
механизм аутентификации выполнив ещё одну команду AUTHENTICATE.
Другими словами, клиент может запрашивать типы аутентификации в
порядке убывания предпочтения.
При успешной аутентификации сервер отправляет *-строку
начинающуюся с аргумента USER
. Второй
аргумент сообщает уровень привилегий пользователя:
user
,
oper
или
admin
. Это значение зависит от
наличия установленных флагов пользователя ADMIN и OPER. Третий
аргумент содержит полное имя пользователя в кавычках, включая доменную
часть в формате user@domain
. Затем следует
ответ OK. После этого сессия переводится в аутентифицированное
состояние в котором доступны соответствующие команды.
Команда UNAUTHENTICATE переводит сессию в не-аутентифицированное состояние. Команда не имеет аргументов и доступна только в аутентифицированном состоянии.
Поддержка команды STARTTLS опциональна. Перед использованием этой команды клиент должен проанализировать объявленные возможности сервера.
Команда STARTTLS запрашивает начало согласования TLS. Согласование начинается сразу после CRLF в ответе OK. Клиент не должен посылать другие команды до получения ответа на команду и завершения согласования.
Команда STARTTLS доступна только в не-аутентифицированном состоянии сессии и только если согласование TLS ещё не производилось.
При успешном выполнении команды, после согласования TLS, сервер посылает список возможностей и ответ OK.
Клиент отправляет команду LOGOUT когда сеанс закончен. Сервер посылает ответ BYE и закрывает соединение TCP. После получения ответа BYE клиент также должен закрыть соединение TCP.
Команда CAPABILITY запрашивает возможности сервера. Эта команда может быть послана клиентом на любой стадии.
В ответ на команду сервер посылает список возможностей и ответ OK.