2013-02-10 67 views
1

有淨cofiguration:Windows標識基礎和端口轉發

客戶端 - FW - IIS

IIS正在監聽8080端口,對IIS Web應用程序,例如MyApp的。 FW實現簡單的端口轉發(將端口80替換爲端口8080)。 假定以下情況:

客戶端詢問http://MyWebSite/MyApp/Index.aspx,FW改變非標準端口80到8080和請求是 http://MyWebSite:8080/MyApp/Index.aspx。 IIS返回到客戶端請求的頁面Index.aspx 一個重要的事情:如果用戶在瀏覽器中鍵入http://MyWebSite/myapp/index.aspx IIS返回http://MyWebSite/MyApp/Index.aspx(因此它根據真實應用程序名稱更改url地址)。 一切正常。

但是,如果我插入標準管道WIF,則會出現問題。例如,我希望MyApp只接受已通過身份驗證的用戶。我想將用戶重定向到一些身份提供者。 如果用戶試圖獲取頁面http://MyWebSite/MyApp/Index.a spx,一切正常,用戶被重定向到IP。但是,如果用戶試圖獲取http://MyWevSite/myapp/index.aspx(應用名稱爲小寫),則IIS返回客戶端重定向至http://MyWebSite:8080/MyApp/Index.aspx。由於端口8080在FW上關閉,因此用戶出現錯誤。 如果我從我的應用程序中刪除WIF,再次正常工作。

有沒有人遇到過這個問題?

回答

1

問題是由Reflector發現的,它在WIF的CookieHandler中。

瀏覽器僅在請求的路徑匹配(區分大小寫)路徑由CookieHandler(默認爲應用程序在IIS上的虛擬目錄)設置時發送cookie。當WIF處理請求時,它將請求的路徑與CokkieHandler的路徑進行比較。如果它們不匹配(區分大小寫)WIF認爲用戶只是輸入了錯誤的封裝網址,但他或她仍想訪問該應用程序,但用戶的瀏覽器不會發送會話Cookie,因爲這些案例不匹配,所以WIF的CookieHandler使重定向到正確的URL,但它不知道任何關於真正的端口號,所以它只是添加了請求的端口號來重定向答案。瀏覽器嘗試重定向,請求的端口在FW上關閉,出現錯誤。

在.NET FW 4.5中,您可以使用自己的Custom CookieHandler並實現其MatchCookiePath方法(例如,可以從應用程序配置文件添加特殊端口號)來覆蓋CookieHandler的默認行爲。

您也可以只使用降低的案例URL和應用程序名稱,並在WIF開始處理它之前降低每個請求,然後就不會有重定向。