syntax: auth_http URL
default: нет
context: mail, server
Директива указывает URL http-сервера авторизации. Протокол описан ниже.
syntax: auth_http_header заголовок значение
default: нет
context: mail, server
Позволяет добавить указанный заголовок к запросам на сервер авторизации. Можно использовать в качестве shared secret для проверки, что запрос пришел от nginx.
Например:
auth_http_header X-Auth-Key "secret_string";
syntax: auth_http_timeout время
default: 60
context: mail, server
Для общения с сервером авторизации используется http. Данные в теле ответов игнорируются, информация передается только в заголовках.
Примеры запросов и ответов:
Запрос:
GET /auth HTTP/1.0 Host: localhost Auth-Method: plain # plain или apop или cram-md5 Auth-User: user Auth-Pass: password Auth-Protocol: imap # imap, pop3 или smtp Auth-Login-Attempt: 1 # какая по счету попытка в рамках одной сессии Client-IP: 192.168.1.1
Хороший ответ:
HTTP/1.0 200 OK # эта строка игнорируется Auth-Status: OK Auth-Server: 10.1.1.1 Auth-Port: 143
Плохой ответ:
HTTP/1.0 200 OK # эта строка игнорируется Auth-Status: Invalid login or password Auth-Wait: 3 # подождать три секунды перед выдачей ошибки клиенту
Если заголовка Auth-Wait нет, то после выдачи ошибки соединение будет закрыта. В текущей реализации на каждую попытку авторизации выделяется память, которая освобождается только при завершении сессии. Поэтому число неудачных попыток авторизации в рамках одной сессии должно быть ограничено - после 10 - 20 попыток (см. заголовок Auth-Login-Attempt) сервер должен выдать ответ без заголовка Auth-Wait.
При использовании APOP или CRAM-MD5 запрос-ответ будут выглядеть так:
GET /auth HTTP/1.0 Host: localhost Auth-Method: apop Auth-User: user Auth-Salt: <238188073.1163692009@mail.example.ru> Auth-Pass: auth_response Auth-Protocol: imap Auth-Login-Attempt: 1 # какая по счету попытка в рамках одной сессии Client-IP: 192.168.1.1
Хороший ответ:
HTTP/1.0 200 OK # эта строка игнорируется Auth-Status: OK Auth-Server: 10.1.1.1 Auth-Port: 143 Auth-Pass: plan-text-pass
Для smtp в ответе дополнительно учитывется заголовок Auth-Error-Code - если он есть, то используется как код ответа в случае ошибки. Если нет, то по умолчанию к Auth-Status будет добавлен код 535 5.7.0
Например если от сервера авторизации будет получен ответ:
HTTP/1.0 200 OK Auth-Status: Temporary server problem, try again later Auth-Error-Code: 451 4.3.0 Auth-Wait: 3
То по smtp клиенту будет выдана ошибка
451 4.3.0 Temporary server problem, try again later