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