HTTP-сервер за IIS: пройти заголовки аутентификации - PullRequest
9 голосов
/ 09 сентября 2011

У меня есть экземпляр IIS, настроенный с проверкой подлинности Windows и перезаписью URL, поэтому он в основном работает в качестве обратного прокси-сервера. Мой внутренний сервер (работает в Linux) ожидает заголовок REMOTE_USER. Можно ли настроить IIS для передачи информации об аутентифицированном пользователе на внутренний сервер?

Ответы [ 2 ]

8 голосов
/ 13 сентября 2011

Если IIS настроен на Windows Auth, то ARR будет выполнять вызов и перенаправлять запросы только после аутентификации пользователя.

Возможно перенаправлять пользовательские заголовки с запросом, используя имя HTTPConvention и serverVariables элемент в правилах перезаписи.Например, в следующем примере серверная переменная LOCAL_ADDR пересылается как заголовок с именем X-MY-HEADER.

<rule name="Reverse Proxy to MySite" stopProcessing="true">
   <match url="^MySite/(.*)" />
   <serverVariables>
      <set name="HTTP_X_MY_HEADER" value="{LOCAL_ADDR}" />
    </serverVariables>
    <action type="Rewrite" url="http://www.myothersite.com/{R:1}" />
</rule>

К сожалению, этот метод невозможно использовать для пересылки заголовка REMOTE_USER.Это связано с тем, что при наличии заголовка Authorization запрос пересылается до запуска модуля аутентификации, и поэтому переменные сервера аутентификации не устанавливаются (при сопоставлении с заголовками они просто проходят через пробел).

Вы можетеоднако установите IIS для использования Basic Windows Auth, а затем извлеките имя пользователя из заголовка Authorization в кодировке Base64 на вашем сервере Linux.

4 голосов
/ 12 ноября 2014

У меня была похожая проблема, и я подумал, что упомяну, как мне удалось ее обойти. Я установил Helicon ISAPI-Rewrite 3 Lite , который является фильтром запросов ISAPI. Поскольку он выполняется после этапа аутентификации в конвейере, он имеет доступ к переменной REMOTE_USER и может перезаписать запрос так, чтобы к нему добавлялся новый заголовок HTTP с REMOTE_USER в качестве значения. Конечно, это помогает, только если у вас есть некоторый контроль над внутренним сервером, поэтому вы можете использовать значение этого пользовательского заголовка вместо исходной переменной REMOTE_USER.

Требуемый фрагмент в файле глобальной конфигурации ISAPI-Rewrite (httpd.conf) выглядит следующим образом:

RewriteBase /
RewriteCond %{REQUEST_URI} ^/MySite.*
RewriteHeader X-Remote-User: .* %{REMOTE_USER}

Часть RewriteCond ограничивает это правило URI, начинающимися с /MySite; не стесняйтесь настроить его по мере необходимости.

...