IIS后面的HTTP服务器:传递身份验证标头

13

我有一个配置了Windows身份验证和URL重写的IIS实例,因此它基本上可以充当反向代理。我的后端服务器(在Linux上运行)期望REMOTE_USER标头。是否可以配置IIS将关于已认证用户的信息传递给后端服务器?

2个回答

9
如果IIS配置了Windows认证,则ARR将会发起挑战并只有在用户通过身份验证后才转发请求。
可以使用HTTP命名约定和rewrite规则中的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,然后从Linux服务器上的Base64编码的Authorization标头中提取用户名。

5
我曾遇到类似的问题,我想提一下我是如何解决它的。我安装了 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部分将此规则限制为以/MySite开头的URI;如有需要,请随意进行调整。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接