LINUX.ORG.RU

Пустая переменная, хотя header отображается

 , , ,


0

1

Всем привет, использую nginx v1.17.6 и oauth2 v4.1.0-12-g7663565 авторизация через Azure

server {

    listen 443 ssl;

    server_name 127.0.0.1;

    ssl_certificate     ../nginx-selfsigned.crt;
    ssl_certificate_key ../nginx-selfsigned.key;

    location /oauth2/ {
            proxy_pass       http://127.0.0.1:4180;
            proxy_set_header Host                    $host;
            proxy_set_header X-Real-IP               $remote_addr;
            proxy_set_header X-Scheme                $scheme;
            proxy_set_header X-Auth-Request-Redirect $request_uri;
    }

    location = /oauth2/auth {
             proxy_pass       http://127.0.0.1:4180;
             proxy_set_header Host             $host;
             proxy_set_header X-Real-IP        $remote_addr;
             proxy_set_header X-Scheme         $scheme;
             # nginx auth_request includes headers but not body
             proxy_set_header Content-Length   "";
             proxy_pass_request_body           off;
    }

    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;
            add_header X-Debug3 "$upstream_http_x_auth_request_user";
            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 admin;

            proxy_pass http://127.0.0.1:5601;

            proxy_set_header Authorization "Basic secret:secret";

            if ($user = "test@mail.ru") {
                    set $username user1;
            }

            proxy_set_header es-security-runas-user $username;

    }

} Переменная user в headers отображается, и если она равна test@mail.ru то if не отрабатывает. Кто поможет найти проблему?

Думается мне, что переменная $user будет «работать» только для подзапроса аутентификации. Попробуй поменять код на

if ($upstream_http_x_auth_request_user = "test@mail.ru") {
    set $username user1;
}

Ну и if лучше не юзать. Вместо него рекомендуют map

map $upstream_http_x_auth_request_user $username {

default              "admin" 
"~*^test@mail.ru$"   "user1"

}

P.S.

~* --- не проверять заглавные или строчные
^ --- начало строки
$ --- конец строки

chaos_dremel ★★ ()
Ответ на: комментарий от chaos_dremel

Большое спасибо за ответ, но к сожалению это не работает. Может вы знаете как можно проверить эти переменные кроме как вывести в header я где-то читал что они чистятся поcле проксирования.

valynkoandrei ()
Ответ на: комментарий от chaos_dremel

$upstream_http_x_auth_request_user не заработал, но я вывел в логи несколько переменных одна из которых была $user и увидел там значение. Далее я сделал так:

map $user $username {

default «admin»;

«~*^test@mail.ru$» «user1»;

}

и все получилось. скорее всего эти «~*,^,$» выражения помогли. Спасибо, очень много времени потратил на поиск проблемы.

valynkoandrei ()