9

我有一個配置了Windows身份驗證和URL重寫的IIS實例,因此它基本上可以用作反向代理。我的後端服務器(在Linux上運行)需要一個REMOTE_USER標題。是否可以配置IIS以將有關經過身份驗證的用戶的信息傳遞給後端服務器?IIS後面的HTTP服務器:通過身份驗證標頭

回答

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> 

不幸的是,不可能使用這種技術來轉發REMOTE_USER標題。這是因爲當存在Authorization標頭時,在驗證模塊運行之前轉發請求,因此auth服務器變量未設置(映射到標頭時,它們只是空白)。

但是,您可以將IIS設置爲使用Basic Windows Auth,然後從您的Linux服務器上的Base64編碼的Authorization標頭中提取用戶名。

3

我有類似的問題,我想我會提到我如何解決它。我已經安裝了Helicon ISAPI-Rewrite 3 Lite,這是一個ISAPI請求過濾器。由於它在管道中的驗證階段之後運行,因此它可以訪問REMOTE_USER變量,並且可以重寫請求,以便以REMOTE_USER作爲其值添加新的HTTP標頭。當然,這隻有在你對後端服務器有一些控制時纔有用,所以你可以利用這個自定義頭的值而不是原來的REMOTE_USER變量。

在所需片段ISAPI-重寫的全局配置文件(httpd.conf)如下:

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

RewriteCond部分限制此規則來開始/MySite的URI;隨時根據需要進行調整。

相關問題