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