2012-01-30 82 views
5

我們正在將一些用於在表單身份驗證下運行的Web應用程序轉換爲現在作爲Windows身份驗證運行。我想通過對實際頁面的最小修改來重新創建表單身份驗證的頁面安全性。我能夠通過簡化的網絡應用程序重新創建我想要的效果。我正在運行Server 2008 R2集成管道IIS 7.5上的應用程序。將Windows身份驗證重定向到自定義401頁面

我使用Windows身份驗證創建了一個簡單的3頁應用程序。這三個頁面:

  • Openpage.aspx,這是開放給任何身份驗證的用戶
  • Blockedpage.aspx被阻止所有用戶(象徵性的目錄或網頁,將被阻止用戶的一個子集基於用戶角色)
  • ErrorPage.aspx,如果blockedpage.aspx被訪問(並被拒絕),應用程序應該轉發到ErrorPage.aspx,其中用戶獲取有關應用程序的通用信息。

的應用程序的Web.config:

<configuration> 
    <system.web> 
     <compilation debug="true" targetFramework="4.0" /> 
     <authentication mode="Windows"/> 
     <authorization> 
     <deny users="?" /> 
     <allow users="*" /> 
     </authorization> 
    </system.web> 
    <location path="blockedpage.aspx"> 
    <system.web> 
     <authorization> 
     <deny users="*"/> 
     </authorization> 
    </system.web> 
    </location> 
    <system.webServer> 
    <httpErrors errorMode="Custom" > 
     <remove statusCode="401" subStatusCode="-1" /> 
     <error statusCode="401" path="/development/simplesecurityapp/errorpage.aspx" responseMode="ExecuteURL" /> 
    </httpErrors> 

    <validation validateIntegratedModeConfiguration="false" /> 
    <defaultDocument> 
     <files> 
     <clear /> 
     <add value="openpage.aspx" /> 
     </files> 
    </defaultDocument> 
    </system.webServer> 

</configuration> 

(如果我不嘗試在401錯誤在asp.net水平重定向,我只是得到標準的「未授權信息」這不是我想給我的用戶的效果。)

但是,我收到一個錯誤,我不明白 - 每次服務器重置,應用程序停止工作。 IIS只會返回401個錯誤,直到瀏覽器彈出手動登錄控制,但無法滿足。 (我從來不希望我的用戶會看到瀏覽器登錄提示)

但是,如果我在應用程序設置完成後替換httperrors節(通過編輯web配置或使用服務器GUI更新它)刪除該部分,訪問該頁面,然後將該部分添加回來,應用程序開始按預期工作,並且一直持續到服務器重新啓動,此時它會再次向用戶提供手動登錄彈出窗口,他們無法解決。

1)這是爲了確保與Windows身份驗證的應用程序(正確的做法是有沒有更好的辦法來配置人跡罕至像表單目錄,但仍提供自定義錯誤頁?)

2)這是集成管道的影響以及爲什麼它以這種方式工作?

回答

1

您試圖通過傳輸錯誤消息提供內容。

Forms允許你這樣做,因爲它由7層的東西組成,比如302s和200s。 401s被客戶端瀏覽器解釋爲「服務器不喜歡我的憑據,因此提出一個對話框來詢問新的」。

經過身份驗證的頁面至少生成1 401個以便通過身份驗證;你爲其他東西重載「錯誤」可能是問題的根源。

我不知道有一個優雅的方式做你想做的。

相關問題