Protegendo APIs REST com NGINX

1

Oi, eu tenho uma API por trás do NGINX. A API é configurada para exigir autenticação para todas as ações. Eu quero ter um proxy NGINX na frente dele para passar parâmetros de autenticação para algumas das ações para que eles possam ser acessados sem autenticação.

A autenticação funciona bem no local principal, no entanto, quando tento especificar um caminho específico no local do NGXINX, ele ainda me solicita credenciais.

Importante aqui é que a única ação que eu quero permitir é o STATUS. Todo o resto não deve ser escolhido pelo segundo local.

Existe uma maneira de fazer isso sem a correspondência de PCRE ou regex?

    location / {
            add_header 'Access-Control-Allow-Origin' *;
            add_header 'Access-Control-Allow-Credentials' 'true';
            add_header 'Access-Control-Allow-Headers' 'Content-Type,Accept';
            add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
            add_header X-Proxy-Cache $upstream_cache_status;
            proxy_ignore_headers X-Accel-Expires Expires Cache-Control Set-Cookie;
            proxy_hide_header Cache-Control;
            proxy_hide_header Set-Cookie;
            proxy_pass http://backend;
             add_header 'Location1' '1';

         location /1/2/3?action=STATUS {
                add_header 'Location2' '2';
                proxy_set_header Authorization "Basic BLAHBLAHBLAH";
                proxy_pass http://backend;

        }

    }
    
por user2630270 17.10.2014 / 17:43

1 resposta

1

A correspondência de local é feita em um URI normalizado que não contém uma string de consulta.

Portanto, é necessário usar um bloco if neste caso:

location /1/2/3 {

    if ($arg_action != "STATUS") {
        return 403;
    }

    add_header 'Location2' '2';
    proxy_set_header Authorization "Basic BLAHBLAHBLAH";
    proxy_pass http://backend;

}
    
por 17.10.2014 / 18:44