2010-01-15 169 views
9

我有一個網站,我希望允許Forms和Windows身份驗證。我的問題是,當您設置IIS以允許匿名(需要表單身份驗證)和Windows驗證瀏覽器不會發送用戶的網絡憑據時,似乎是這樣。匿名前的IIS Windows身份驗證

它只是使用匿名登錄。有沒有什麼辦法在IE8或IIS中嘗試Windows Auth 1st,然後回退到匿名?

感謝您的任何幫助。

+0

可能的重複[如何支持NTLM身份驗證回退形式在ASP.NET MVC?](http://stackoverflow.com/questions/4027911/how-to-support-ntlm-authentication-with-回到形式在asp-net-mvc) – Neil 2014-01-15 17:32:56

回答

11

在沒有證書的情況下,您不能要求HTTP身份驗證(無論是基本身份驗證還是集成Windows身份驗證),而不會導致身份驗證對話框彈出。

因此,通常對於混合HTTP-auth + cookie-auth方法,您爲網站的批量啓用匿名和經過身份驗證的訪問,但只允許對特定腳本進行身份驗證訪問。

當用戶訪問沒有任何一種身份驗證的頁面時,您會使用基於cookie的身份驗證的登錄表單來提取頁面,並且還會鏈接到僅允許驗證訪問的一個URL。用戶可以填寫表單以獲得cookies &表單auth,或點擊鏈接以使用HTTP auth登錄。

如果用戶關注該鏈接,他們將得到401響應,並且必須通過auth對話框或可能自動使用集成Windows身份驗證提供HTTP身份驗證。一旦發生這種情況,瀏覽器將開始向每個將來的頁面提交相同的憑據,所以IIS將解碼憑據,以在您的主站點腳本運行時爲您提供預期的REMOTE_USER

瀏覽器只會將憑據提交到與401腳本相同的目錄中的頁面或其子目錄。爲此,最好將HTTP-auth-required腳本放在根目錄中,例如/login.aspx

但是,有幾個瀏覽器不會自動提交更多頁面的憑據,並且需要每個HTTP請求都先用401來響應,然後再用憑證發送請求。這使得可選的認證和混合認證方案變得不可能(以及讓受保護網站的瀏覽速度慢得多!)。唯一現代的瀏覽器就是Safari。您可能並不在乎,因爲Safari對集成Windows身份驗證的支持傳統上始終不穩定,並且仍然可以使用表單+ Cookie身份驗證類型。

+0

嗯,對於downvote對不起,不知道爲什麼,但不能明顯撤消.. – Onkelborg 2013-03-24 21:10:06