Re: Как использовать переменную upstream http x auth request user

Maxim Dounin mdounin на mdounin.ru
Чт Янв 9 13:27:09 UTC 2020


Hello!

On Thu, Jan 09, 2020 at 02:53:53AM -0500, andrei_abc wrote:

> у меня есть конфигурация nignx v1.17.6 c oauth2_proxy  v4.1.0-12-g7663565
> авторизация проходит через Azure.

[...]

>         location / {
>                 auth_request /oauth2/auth;
>                 error_page 401 = /oauth2/sign_in;
> 
>                 auth_request_set $user  
> $upstream_http_x_auth_request_user;
>                 auth_request_set $email 
> $upstream_http_x_auth_request_email;
>                 proxy_set_header X-User  $user;
>                 proxy_set_header X-Email $email;
>                 auth_request_set $auth_cookie $upstream_http_set_cookie;
>                 add_header Set-Cookie $auth_cookie;
> 
>                 auth_request_set $auth_cookie_name_upstream_1
> $upstream_cookie_auth_cookie_name_1;
> 
>                 add_header X-Debug "$user";
>                 add_header X-Debug2 "$email";
> 
>                 set $username ocadmin;
> 
>                 proxy_pass http://127.0.0.1:5601;
> 
>                 proxy_set_header Authorization "Basic secret:secret";
> 
>           
>                 if ($user = "test at mail.ru") {
>                         set $username user1;
>                 }
> 
>                 proxy_set_header es-security-runas-user $username;
> 
>         }
> 
> }
> 
> переменную user и email в header видно, и если она ровна test at mail.ru, if
> все равно не выполняется
> Кто подскажет в чем может быть проблема?

Проблема в том, что if - выполняется при выборе конфигурации, см. 
описание модуля rewrite тут:

http://nginx.org/ru/docs/http/ngx_http_rewrite_module.html

Соответственно к тому моменту, как выбрана конфигурация и началась 
обработка запроса в рамках "location /" - в частности, выполнился 
auth_request - директива if уже давно отработала, и пытаться в ней 
использовать результаты auth_request - бессмысленно.

В данном случае правильно использовать map, как-то так (на уровне 
http):

   map $user $username {
       default       ocadmin;
       test at mail.ru  user1;
   }

Ну и соответственно убрать "set $username ..." и "if ($user ...".

-- 
Maxim Dounin
http://mdounin.ru/


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