Posso comparar uma variável definida por auth_request_set depois que o auth_request retornou no nginx?

2

Eu tenho um bloco de localização com um auth_request como este

location /somepath {
    auth_request /authorize;
    auth_request_set $header_variable $upstream_http_custom_header;

    proxy_path http://backendaddress;
}

O que eu quero fazer é, se o $header_variable não corresponder a um regex específico, eu quero retornar um código 403.

if não vai funcionar porque é executado muito cedo. Há mais alguma coisa que me permita fazer isso?

    
por Glenn Slaven 12.08.2015 / 10:24

1 resposta

1

O módulo Nginx auth_request aguarda pelo código HTTP 200 ou 401/403 do back-end:

The ngx_http_auth_request_module module (1.5.4+) implements client authorization based on the result of a subrequest. If the subrequest returns a 2xx response code, the access is allowed. If it returns 401 or 403, the access is denied with the corresponding error code. Any other response code returned by the subrequest is considered an error.

Sua solicitação tem um cabeçalho que exige a verificação de permissão:

What I want to do is, if the $header_variable doesn't match a particular regex I want to return a 403 code.

Durante o ciclo de solicitação / resposta de autenticação, o back-end precisa verificar o cabeçalho e retornar o código 403 para impedir que a próxima solicitação ocorra sem autenticação. O módulo auth_request funciona como uma simples declaração de teste que retorna um dos códigos. Isso significa que o processo backend responsável por essa URL responder link precisa ter uma verificação adicional para o cabeçalho necessário.

    
por 16.08.2015 / 09:48