Назад | Перейти на главную страницу

Могу ли я сравнить переменную, установленную auth_request_set после того, как auth_request был возвращен в nginx?

У меня есть блок местоположения с auth_request как это

location /somepath {
    auth_request /authorize;
    auth_request_set $header_variable $upstream_http_custom_header;

    proxy_path http://backendaddress;
}

Что я хочу сделать, это если $header_variable не соответствует определенному регулярному выражению. Я хочу вернуть код 403.

if не сработает, потому что запускается слишком рано. Что еще могло бы позволить мне это сделать?

Модуль Nginx auth_request ждет HTTP-кода 200 или 401/403 от бэкэнда:

Модуль ngx_http_auth_request_module (1.5.4+) реализует авторизацию клиента на основе результата подзапроса. Если подзапрос возвращает код ответа 2xx, доступ разрешен. Если он возвращает 401 или 403, доступ запрещается с соответствующим кодом ошибки. Любой другой код ответа, возвращенный подзапросом, считается ошибкой.

В вашем запросе есть заголовок, требующий проверки разрешения:

Я хочу сделать следующее: если $ header_variable не соответствует конкретному регулярному выражению, я хочу вернуть код 403.

Во время цикла запроса / ответа аутентификации ваш бэкэнд должен проверить заголовок и вернуть код 403, чтобы предотвратить следующий запрос без аутентификации. Модуль auth_request работает как простой тестовый assert, который возвращает один из кодов. Это означает, что серверный процесс отвечает за этот URL-адрес для ответа http: // backendaddress / авторизоваться требуется дополнительная проверка требуемого заголовка.