Рейтинг:0

Аутентификация подзапроса nginx не работает должным образом

флаг ws

Я хочу добавить элементы управления доступом ко всему виртуальному хосту на обратном прокси-сервере. Для этого я использую аутентификацию подзапроса nginx. Ожидаемое взаимодействие заключается в том, что пользователь либо получит сообщение об ошибке со ссылкой на страницу входа, либо страница входа будет отображаться по запрошенному URL-адресу. По завершении процесса входа в систему у пользователя должен быть какой-то механизм для навигации/перезагрузки первоначально запрошенного URL-адреса. На самом обратном прокси-сервере (т.е. нет PHP) нет возможности сценариев, что ограничивает возможности захвата и распространения исходного URL-адреса в процессе аутентификации.

Мое ожидание: если запрос не проходит аутентификацию (т. http://authprovider.example.com:8081/gateway/index.php возвращает 401) Я хочу, чтобы определенный контент возвращался по запрошенному URL-адресу без перенаправления и со статусом 4xx.

сервер {
    слушать 80;
    имя_сервера www.example.com;
    корень /var/www/html;

    error_page 401 iprestricted.html;
    ## Это обеспечивает обратную связь с пользователем, когда запрос запрещен
    ## (включая ссылку для входа)
    # местоположение /iprestricted.html {
    # try_files $uri $uri/ =404;
    # }

    # Это реализует проверку подзапроса....
    местоположение / ограничено {
            внутренний;
            proxy_pass http://authprovider.example.com:8081/gateway/index.php;
            proxy_pass_request_body выключен;
            proxy_set_header Длина содержимого "";
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Исходный URI $request_uri;
    }
    место расположения / {
            auth_request/ограниченный;
            proxy_pass http://localwebserver/;
    }
}

Однако:

Если расположение /iprestricted.html{...} закомментирован, я получаю цикл перенаправления в http://www.example.com

Если он не закомментирован, то любые запросы получают ответ 302 с Location /iprestricted.html, который возвращает код состояния 200.

Как реализовать аутентификацию подзапроса без перенаправления?

Есть ли другой способ захватить исходный URL-адрес и передать его на шаг аутентификации, используя только конфигурацию nginx?

я пробовал добавить add_header WWW-Authenticate "Basic realm=bipdevtest"; в каждом из указанных выше мест, но это не было отправлено обратно в ответах HTTP.

Рейтинг:0
флаг ws

Всегда хорошая идея РТФМ

Nginx передаст заголовок WWW-Authenticate, если он будет возвращен провайдером auth_request (http://authprovider.example.com:8081/gateway/index.php в выше).

Однако я оставлю вопрос открытым, так как меня смущает/обеспокоена настраиваемая страница ошибок, приводящая к перенаправлению 302, за которым следует ответ 200.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.