2011-07-26 47 views
1

我有幾個網站同時允許匿名和窗口auth用戶。基本上,如果您在Windows系統上使用基於IE或Webkit的瀏覽器訪問該站點,服務器會立即識別您的活動目錄用戶和組。如何在ASP.net中提升角色從匿名到Windows身份驗證?

在過去,我提供了一個鏈接到一個僅允許當前用戶登錄或反彈回開始位置的windows auth頁面。

我發現這種令人沮喪的管理,因爲我需要確保IIS在每次部署後都具有該單個頁面的正確安全設置。

有沒有更好的方式讓我允許用戶從匿名升級到驗證?

回答

0

好的,我想出了一個相當不錯的方式來做到這一點...但是它沒有我期望的那麼優雅,因爲它不適用於各種應用程序。

基本上,如果您在Anon + Integrated Auth IIS6網站或虛擬目錄中創建單個頁面,我們將其稱爲auth.aspx,然後您可以使用此頁面來提示身份驗證。

進入IIS設置並指定auth.aspx是集成身份驗證ONLY(無匿名)。然後在頁面上的某處創建一個隱藏的iframe。然後,我創建了一個簡單的JavaScript操作來將iframe的src屬性更新爲auth.aspx頁面。這迫使瀏覽器嘗試使用NTLM進行身份驗證。一旦你輸入有效的證書,你已經成功地提升了你當前的用戶,而不是通用的匿名用戶。

最後一個問題是將一個Response.Redirect包含到auth.aspx中,它將重新加載當前頁面。假設您的ASP.net會話標記設置正確,頁面將重新加載並且用戶將被認證。

1

沒有其他方法可以自動完成該高程。服務器無法知道當前用戶是否是Windows用戶並提升他們,或者自動將他們重定向到Windows auth only頁面。另一方面,如果每個用戶都將通過Windows身份驗證唯一頁面,則所有不在域內的用戶都將看到質詢/響應對話框(用戶名+密碼)。

至於確保此特殊頁面具有正確安全設置的管理部分,您可以(也應該)以某種方式自動執行檢查。例如,通過在應用程序啓動時(在Global.asax中)查詢IIS metabase的設置,並且該設置不存在,請將其記錄爲電子郵件消息等。我個人更喜歡不同的態度 - 一個特殊的「集成/部署」頁面,其中包含一系列針對我的應用程序的測試,因此我可以確保在服務器上正確設置了所有內容,例如NTFS對某些文件夾的寫入權限,可用性在web.config中設置的SMTP服務器發送電子郵件等。

注意:您正在使用Windows身份驗證以及匿名訪問。請記住,如果您將來考慮實施Forms身份驗證,IIS 7的錯誤架構(我不知道是通過設計還是由於缺陷)不允許您將該應用程序設置爲Forms Authentication並設置一個將特定頁面設爲Windows身份驗證。重寫只是不起作用,這是非常令人沮喪的。

祝你好運!

+0

對IIS7的很好的評論,因爲我很快就會轉向。我有幾個想法我會打,但你的評論當然有幫助。 – farina

相關問題