Обратный прокси-сервер не работает для ADFS с использованием ARR и URL-Rewrite в IIS

Я пытаюсь реализовать обратный прокси-сервер с использованием модуля перезаписи ARR и URL-адресов в IIS. У меня есть два сервера с именами A и B. Я установил ADFS на сервере «A», а сервер «B» используется только для обратного прокси. Я установил модули ARR и URL-Rewrite на сервере «B».

Например, доменное имя сервера «A» «myadfs1.com» и доменное имя сервера «B» «myproxy.com». URL-адрес страницы входа на сервер федерации - https://myadfs1.com/adfs/ls/IdpInitiatedSignon.aspx < / а>

Описание проблемы -
Когда я обращаюсь к прямому URL-адресу ADFS, то есть
https://myadfs1.com/adfs/ls/IdpInitiatedSignon.aspx, получение ответа и открытие страницы входа в ADFS нормально. Нет проблем. Но когда я пытаюсь получить доступ к странице входа в ADFS через прокси, то есть https://myproxy.com/adfs/ls/IdpInitiatedSignon.aspx получает ошибку 503, т.е. служба недоступна.

Ниже правила, которые я использую для перезаписи -

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <outboundRules>
                <preConditions>
                    <preCondition name="ResponseIsHtml1">
                        <add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/html" />
                    </preCondition>
                </preConditions>
            </outboundRules>
            <rules>
                <clear />
                <rule name="ReverseProxyInboundRule2" stopProcessing="true">
                    <match url="[a][d][f][s](.*)" />
                    <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
                        <add input="{HTTPS}" pattern="On" />
                    </conditions>
                    <action type="Rewrite" url="https://myadfs1.com/adfs{R:1}" appendQueryString="true" logRewrittenUrl="true" />
                </rule>                
            </rules>
        </rewrite>
        <tracing>
            <traceFailedRequests>
                <add path="*">
                    <traceAreas>
                        <add provider="ASP" verbosity="Verbose" />
                        <add provider="ISAPI Extension" verbosity="Verbose" />
                        <add provider="WWW Server" areas="Authentication,Security,Filter,StaticFile,CGI,Compression,Cache,RequestNotifications,Module,FastCGI,WebSocket" verbosity="Verbose" />
                    </traceAreas>
                    <failureDefinitions timeTaken="00:00:00" statusCodes="400-600" />
                </add>
            </traceFailedRequests>
        </tracing>
    </system.webServer>
    <system.web>
        <identity impersonate="false" />
    </system.web>
</configuration>

Некоторые наблюдения -

Если я пытаюсь получить доступ к https://myproxy.com/adfs/ls/IdpInitiatedSignon.aspx URL, то я не получаю никаких журналов IIS на прокси-сервере. Но если я попробую тот же URL, просто заменив «adfs» на «adfs1», тогда IIS регистрирует запрос и получает ошибку 404.

Поэтому мне нужна помощь в настройке обратного прокси-сервера для доступа к ADFS.


person Sourin    schedule 27.11.2015    source источник
comment
Вы нашли решение? Я нашел много руководств, в которых для выполнения этой задачи используется прокси веб-приложения (WAP) из Windows 2012 R2 вместо IIS ARR. см. msdn.microsoft.com/en-us/library/azure/dn528859 .aspx   -  person dataCore    schedule 08.03.2016


Ответы (1)


Я только что сам наткнулся на это, оказалось, что что-то не было удалено на моем сервере IIS, когда я устанавливал на нем ADFS в прошлом, а затем удалил его.

Компонент http.sys в Windows имеет функцию под названием «Резервирование URL-адресов», которая позволяет нескольким приложениям работать с одним и тем же именем хоста, не мешая друг другу. Это позволяет запускать IIS, ADFS, шлюз удаленных рабочих столов и т. Д. На одном сервере.

Я выполнил на своем сервере следующую команду:

netsh http show urlacl

В нем перечислены все зарезервированные URL-адреса, и несколько из них были для ADFS - несмотря на то, что он больше не установлен на этом конкретном компьютере! Затем я выполнил следующие команды:

netsh http delete urlacl http://+:80/adfs/
netsh http delete urlacl https://+:443/adfs/
netsh http delete urlacl https://+:49443/adfs/
netsh http delete urlacl https://+:443/FederationMetadata/2007-06/

После этого все заработало.

person Alex    schedule 18.03.2016