2012-11-08 71 views
0

我有一個使用Forms身份驗證的Web應用程序。我有一個我不想重定向到登錄表單的頁面。我有這個該頁面:wif表單 - 身份驗證重定向甚至匿名用戶

<location path="service1.svc"> 
    <system.web> 
    <authorization> 
     <allow users="?"/> 
    </authorization> 
    </system.web> 
</location> 

從我的理解,如果用戶沒有通過驗證(匿名),他們嘗試訪問page1.svc那麼他們就不會被重定向到登錄頁面,但在我的應用程序,他們仍然是。

我在這裏錯過了什麼嗎?

回答

0

我想通了! Forms-authentication模塊的工作方式是檢查EndRequest方法中的任何傳出響應,並且如果狀態代碼是401(未授權),則它將狀態代碼更改爲320並將其重定向到登錄頁面。我的情況發生了什麼是我有一個單獨的模塊,在forms-auth頁面暫停之前操作響應,偶爾會將狀態碼設置爲401以啓動ntlm身份驗證交換。但是在交換可能發生之前,forms-auth攔截了它。

解決方法是使用EndRequest方法在global.aspx文件中設置狀態碼返回到401,因爲表單的身份驗證就由這點已經操縱它。在我的情況下,不是首先將狀態代碼設置爲401,而是將其設置爲407,然後在endRequest方法中將其捕獲,將其更改回401,並避免將forms-auth模塊放在一起。