Auth HTTP#
O módulo habilita autenticação baseada em subrequisição enviando uma requisição HTTP
adicional antes de processar a requisição principal. Se a subrequisição retornar um
status 2xx, a requisição principal prossegue; se retornar 401 ou 403, o erro
apropriado é enviado ao usuário, enquanto qualquer outra resposta dispara um erro 500. Esta
abordagem é tipicamente usada para delegar autenticação para serviços externos,
unificar autenticação entre aplicações, ou integrar com sistemas de terceiros
como OAuth ou LDAP. Define a URL do servidor de autenticação HTTP. O protocolo é descrito abaixo. Anexa o cabeçalho especificado às requisições enviadas ao servidor de autenticação. Este cabeçalho pode ser usado como um segredo compartilhado para verificar que a requisição vem do Angie. Por exemplo: Padrão mail, server Anexa o cabeçalho Define o timeout para comunicação com o servidor de autenticação. O protocolo HTTP é usado para comunicar com o servidor de autenticação. Os dados no corpo da resposta são ignorados; informações são passadas apenas nos cabeçalhos. Requisição: Resposta boa: Resposta ruim: Se não houver cabeçalho Quando APOP ou CRAM-MD5 é usado, a requisição-resposta ficará como segue: Resposta boa: Se o cabeçalho Para SMTP, a resposta adicionalmente leva em conta o cabeçalho Por exemplo, se a seguinte resposta for recebida do servidor de autenticação: então o cliente SMTP receberá um erro Se o proxy SMTP não requer autenticação, a requisição ficará como segue: Para conexões de cliente SSL/TLS, o cabeçalho Quando o certificado do cliente estava presente, seus detalhes são passados nos seguintes cabeçalhos de requisição: Quando o protocolo PROXY é usado, seus detalhes são passados nos seguintes cabeçalhos de requisição: Diretivas#
auth_http#
auth_http_header#
auth_http_header X-Auth-Key "secret_string";
auth_http_pass_client_cert#
auth_http_pass_client_cert
on
| off
;auth_http_pass_client_cert off;
Auth-SSL-Cert
com o certificado do cliente em formato PEM (urlencoded) às requisições enviadas ao servidor de autenticação.auth_http_timeout#
Protocolo#
Exemplos de requisições e respostas:#
GET /auth HTTP/1.0
Host: localhost
Auth-Method: plain # plain/apop/cram-md5/external
Auth-User: user
Auth-Pass: password
Auth-Protocol: imap # imap/pop3/smtp
Auth-Login-Attempt: 1
Client-IP: 192.0.2.42
Client-Host: client.example.org
HTTP/1.0 200 OK
Auth-Status: OK
Auth-Server: 198.51.100.1
Auth-Port: 143
HTTP/1.0 200 OK
Auth-Status: Invalid login or password
Auth-Wait: 3
Auth-Wait
, um erro será retornado e a conexão será fechada. A implementação atual aloca memória para cada tentativa de autenticação. A memória é liberada apenas no final de uma sessão. Portanto, o número de tentativas de autenticação inválidas em uma única sessão deve ser limitado — o servidor deve responder sem o cabeçalho Auth-Wait
após 10-20 tentativas (o número da tentativa é passado no cabeçalho Auth-Login-Attempt
).GET /auth HTTP/1.0
Host: localhost
Auth-Method: apop
Auth-User: user
Auth-Salt: <238188073.1163692009@mail.example.com>
Auth-Pass: auth_response
Auth-Protocol: imap
Auth-Login-Attempt: 1
Client-IP: 192.0.2.42
Client-Host: client.example.org
HTTP/1.0 200 OK
Auth-Status: OK
Auth-Server: 198.51.100.1
Auth-Port: 143
Auth-Pass: plain-text-pass
Auth-User
existir na resposta, ele substitui o nome de usuário usado para autenticar com o backend.Auth-Error-Code
— se existir, é usado como código de resposta em caso de erro. Caso contrário, o código 535 5.7.0 será adicionado ao cabeçalho Auth-Status
por padrão.HTTP/1.0 200 OK
Auth-Status: Temporary server problem, try again later
Auth-Error-Code: 451 4.3.0
Auth-Wait: 3
451 4.3.0 Temporary server problem, try again later
GET /auth HTTP/1.0
Host: localhost
Auth-Method: none
Auth-User:
Auth-Pass:
Auth-Protocol: smtp
Auth-Login-Attempt: 1
Client-IP: 192.0.2.42
Client-Host: client.example.org
Auth-SMTP-Helo: client.example.org
Auth-SMTP-From: MAIL FROM: <>
Auth-SMTP-To: RCPT TO: <postmaster@mail.example.com>
Auth-SSL
é adicionado, e Auth-SSL-Verify
conterá o resultado da verificação do certificado do cliente, se habilitado: SUCCESS
, FAILED:reason
, e NONE
se um certificado não estava presente.Auth-SSL-Subject
, Auth-SSL-Issuer
, Auth-SSL-Serial
, e Auth-SSL-Fingerprint
. Se auth_http_pass_client_cert estiver habilitado, o certificado em si é passado no cabeçalho Auth-SSL-Cert
. O protocolo e cifra da conexão estabelecida são passados nos cabeçalhos Auth-SSL-Protocol
e Auth-SSL-Cipher
. A requisição ficará como segue:GET /auth HTTP/1.0
Host: localhost
Auth-Method: plain
Auth-User: user
Auth-Pass: password
Auth-Protocol: imap
Auth-Login-Attempt: 1
Client-IP: 192.0.2.42
Auth-SSL: on
Auth-SSL-Protocol: TLSv1.3
Auth-SSL-Cipher: TLS_AES_256_GCM_SHA384
Auth-SSL-Verify: SUCCESS
Auth-SSL-Subject: /CN=example.com
Auth-SSL-Issuer: /CN=example.com
Auth-SSL-Serial: C07AD56B846B5BFF
Auth-SSL-Fingerprint: 29d6a80a123d13355ed16b4b04605e29cb55a5ad
Proxy-Protocol-Addr
, Proxy-Protocol-Port
, Proxy-Protocol-Server-Addr
, e Proxy-Protocol-Server-Port
.