Re: BASIC Авторизация пользователей в зависимости от аргументов запроса.

Maxim Dounin mdounin at mdounin.ru
Wed Jul 2 09:54:54 UTC 2014


Hello!

On Wed, Jul 02, 2014 at 01:08:14PM +0400, Maksim Zavyalov wrote:

> Привет. Такой вопрос: возможно ли сделать авторизацию пользователей в
> зависимости от того, какие параметры были отправлены cgi-скрипту.
> 
> Как пример:
> 
> location / {
> 
>                 fastcgi_param QUERY_STRING $query_string;
>                 fastcgi_param REQUEST_METHOD $request_method;
>                 fastcgi_param REQUEST_URI $request_uri;
>                 fastcgi_param SCRIPT_FILENAME $document_root/index.cgi;
>                 if ($arg_p = "PATTERN")
>                 {
>                         auth_basic           "closed site";
>                         auth_basic_user_file /path/to/user.pwd;
>                 )
>                 fastcgi_pass unix:/var/run/fcgiwrap.socket;
>         }
> В апаче это делалось выставлением переменной окруженя, которая проверялась
> директивой
> Deny from env={ENV_VARIABLE}
> 
> Возможно-ли что-то подобное в nginx, спасибо.

Директива auth_basic начиная с версии 1.3.10 понимает переменные, 
и если в результате получится специальное значение "off" - то 
проверок не будет.  Соответственно можно сделать как-то так:

    location / {
        set $realm "off";

        if ($arg_p = "...") {
            set $realm "closed site";
        }

        auth_basic $realm;
        auth_basic_user_files /path/to/file;

        ...
    }

Ну или тривиальный и работающий для произвольных директив метод - 
сделать rewrite в другой location, и там написать то, что нужно:

    location / {
        if ($arg_p = "...") {
            rewrite (.*) /closed/$1 break;
        }

        ...
    }

    location /closed/ {
        auth_basic "closed site";
        auth_basic_user_files /path/to/file;

        ...
    }

Следует, однако, понимать, что вообще подобные проверки 
аутентификации/авторизации по параметрам, вынесенные отдельно от 
кода, эти прараметры обрабатывающего, - они чреваты боком.  Потому 
как завтра выяснится, что ваш cgi-код понимате параметры, 
разделённые ";" (а не только "&", как nginx), и соответственно 
окажется, что авторизация - обходится тривиально.

-- 
Maxim Dounin
http://nginx.org/



Подробная информация о списке рассылки nginx-ru