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

And*_*w T 10 authentication iis reverse-proxy basic-authentication http-headers

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

The*_*ing 8

如果配置了IIS Windows Auth,ARR则会在用户通过身份验证后提出质询并仅转发请求.

可以使用重写规则中的HTTP命名约定和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>
Run Code Online (Sandbox Code Playgroud)

不幸的是,无法使用此技术转发REMOTE_USER标头.这是因为当Authorization标头存在时,请求在认证模块运行之前被转发,因此未设置auth服务器变量(当映射到标题时,它们只是通过空白).

但是,您可以将IIS设置为使用Basic Windows Auth,然后从Linux服务器上的Base64编码Authorization标头中提取用户名.


Tam*_*más 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}
Run Code Online (Sandbox Code Playgroud)

RewriteCond部分将此规则限制为以/MySite;开头的 URI 。随意根据需要进行调整。