2014-10-10 20 views
0

我們公司使用ASP.NET webapp,我必須將其與外部身份提供程序集成。爲此,認證流量在某些情況下被重定向到引用某個外部庫的處理程序,以解釋來自身份提供者的authentican請求。在Cookieless ASP.NET應用程序中更改SessionState以刪除會話ID重定向

因此,在處理程序代碼應該用於與身份提供者進行通信的情況下,在Global Application_BeginRequest中對其進行重定向。有點像這樣:

Response.Redirect(tempUrl & "/auth/" & companyName & "/login.ashx")

的問題是,會話狀態被設置爲在根web.config是cookie的是這樣的:

<sessionState mode="InProc" [snip] cookieless="true" />

這意味着重定向本身會被捕獲並重新定向,前綴爲會話ID。在login.ashx處理程序中,請求被髮送到外部身份提供程序的URL,該身份驗證程序將其響應作爲POST進行身份驗證併發回到同一個處理程序URL,即「http://www.thesite.com/auth/somecompany/login.ahsx」,但是,這次沒有會話標識,課程。同樣,POST被重定向爲GET,從表單數據中剝離響應,因此身份驗證無法繼續。然後該請求被無限循環地重定向回身份提供者。

因此,我們需要關閉特定處理程序的無Cookie會話狀態。我們已經調查了幾個選項。

首先,不幸的是,EnableSessionState屬性不能用於處理頁面指令。

然後,我們試圖通過捕捉和禁用它在Global.asax.Application_BeginRequest,像這樣改變請求特定的URL的SessionState的行爲:

HttpContext.Current.SetSessionStateBehavior(System.Web.SessionState.SessionStateBehavior.Disabled)

這似乎在一個工作階段,但不再是,我們不知道爲什麼。

我們還嘗試瞭解「無cookie」是否可以動態更改,但相應的字段似乎是隻讀的。

我們在「auth」文件夾中放置了一個單獨的Web.config,並試圖將cookieless設置爲true,但這不被允許。

我們可以捕獲響應並查看是否正在Application_EndRequest中重定向,並且想知道是否可以以某種方式阻止特定URL的重定向和會話ID插入,但我們不知道如何。有沒有人有一些提示?我們正在用盡想法...

回答

0

我們通過將有問題的子文件夾轉換爲IIS中的虛擬應用程序並將其分配給自己的Web.Config(無Cookie可關閉)來計算出來。