首页 文章

在IIS上使用ARR和URL-Rewrite反向代理不适用于ADFS

提问于
浏览
1

我试图在IIS上使用ARR和URL重写模块实现反向代理 . 我有两个名为A和B的服务器 . 我在服务器“A”上安装了ADFS,而服务器“B”仅用于反向代理 . 我在服务器“B”上安装了ARR和URL-Rewrite模块 .

例如,服务器"A"域名"myadfs1.com"和服务器"B"域名"myproxy.com" . 联合服务器登录页面URL - https://myadfs1.com/adfs/ls/IdpInitiatedSignon.aspx

Problem statement -
当我访问直接ADFS URL,即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>

Some observation –

如果我尝试访问https://myproxy.com/adfs/ls/IdpInitiatedSignon.aspx URL,那么我在代理服务器上的IIS上没有任何日志 . 但是,如果我尝试将相同的URL替换为"adfs"到"adfs1",那么IIS会记录请求并收到404错误 .

所以我正在寻找帮助为我的ADFS访问配置反向代理 .

1 回答

  • 0

    我自己偶然发现了这一点,事实证明,当我在过去安装ADFS并稍后删除它时,我的IIS服务器上没有删除某些内容 .

    Windows中的http.sys组件具有一个名为“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/
    

    一旦完成这一切,一切都开始奏效 .

相关问题