如何整合AD驗證和ASP.NET表單驗證為一個網站


如何整合AD驗證和ASP.NET表單驗證為一個網站

一般網站只能由一種驗證模式:AD驗證或Form驗證,但事實中我們經常碰見需要整合的情況,那么我們需要設置整個網站是基於Windows身份驗證的,當失敗是自動轉向Form驗證:

IIS及應用程序的設置:

1. 將IIS設置為禁用匿名身份驗證,啟用windows 集成身份驗證

2. 將整個網站的缺省顯示頁面定位主頁(登陸后要顯示的頁面)在Web.config文件里設定將網頁導向AD驗證的主頁面(我們暫定為WinADLogin.aspx)。

image

Win7 上設置方式

clip_image003

Win2k3 上設置方式

特別注意:由於目前整個網站配置的是Windows集成驗證,如果訪問的機器不在域里,不管訪問任何頁面,都將彈出輸入憑證的對話框:

因此我們要對WinLogin.aspx頁面設置Forms的授權方式 ,對該頁面拒絕匿名用戶訪問,當匿名用戶訪問時將會出錯,並自動轉到WebLogin.aspx頁面

WebLogin.aspx頁面允許匿名訪問;

 

clip_image005

當使用者登入網站並且提出瀏覽網頁需求的時候,整個登陸流程如下:

Ø 當用戶訪問的頁面時,如果已經授權,

1. 則直接訪問需要的頁面

Ø 如還沒有授權,則

1. 首先記錄用戶訪問的頁面到Session里

2. 若IIS中的Windows整合驗證成功則由WinLogin.aspx此網頁來導行使用者到:原來的要求網頁

3. 若IIS的整合驗證失敗則導向Redict401.htm網頁;

4. 在Redict401.htm讓使用者轉向為表單驗證Weblogin.aspx頁面

5. 用戶在這個網頁上做登入認證成功之后再導向使用者到:原本的需求頁面(Session里存儲的頁面)。

整個流程圖如下:

clip_image005

由於當Windows身份驗證失敗后,IIS將自動導向IIS自定制好的錯誤頁面Redirect401.htm,我們無法通過程序去控制,所以我們必須自定制Redirect401.htm,將這個頁面導向我們自定制的Webform身份驗證的頁面WebLogin.aspx頁面。

clip_image006

Win2k3 上錯誤頁面

clip_image008

Win7上錯誤頁面

我們可以直接修改401 頁面,但是不建議這么做

clip_image009

具體處理過程如下:

1. 在Web.config里的<system.web></system.web>節點中添加<customErrors mode="On" defaultRedirect="ApplicationErroy.aspx" ></customErrors>節點,

2. 在web.config中也可以把

<error statusCode="401.1" redirect="Weblogin.aspx" />//Windows登陸失敗
//<error statusCode="403" redirect="NoAccess.htm" />//訪問被禁止
//<error statusCode="404" redirect="FileNotFound.htm" />//找不到頁面

3. 添加Global.asax文件,找到Application_Error事件,加入以下代碼:
Exception erroy = Server.GetLastError();
string err = "出錯頁面是:" + Request.Url.ToString() + "<br>";
err += "異常信息:" + erroy.Message + "<br>";
err += "Source:" + erroy.Source + "<br>";
err += "StackTrace:" + erroy.StackTrace + "<br>";
Server.ClearError();
Application["erroy"] = err;

4. 添加錯誤處理頁面:ApplicationErroy.aspx 加入以下代碼;
Response.Write(Application["erroy"].ToString());

參考:401錯誤的具體原因:

401 - 訪問被拒絕。IIS 定義了許多不同的 401 錯誤,它們指明更為具體的錯誤原因。這些具體的錯誤代碼在瀏覽器中顯示,但不在 IIS 日志中顯示:

401.1 - 登錄失敗。

401.2 - 服務器配置導致登錄失敗。

401.3 - 由於 ACL 對資源的限制而未獲得授權。

401.4 - 篩選器授權失敗。

401.5 - ISAPI/CGI 應用程序授權失敗。

401.7 – 訪問被 Web 服務器上的 URL 授權策略拒絕。這個錯誤代碼為 IIS 6.0 所專用。

 

以上思路雖然可以實現AD 及Form混合驗證,但是需要修改的地方比較多,我們可以按以下思路改善之

對於AD用戶:

  1. 如果某個AD用戶通過AD訪問我們的網站,且以前我們沒有該AD用戶的申請記錄,則我們可以開啟一個權限申請的頁面;
  2. 該用戶通過權限申請頁面,選擇某個角色后,向其所在組織的管理員發送開啟某種角色郵件
  3. 該用戶所在的管理員收到申請后,如核准該用戶的角色,則
  4. 該用戶再次通過AD方式登錄該網站時將自動獲取訪問頁面的權限(我們只需根據該用戶的AD賬戶在我們的系統中查看該用戶的角色和權限即可)
  5. 但當同樣的用戶通過Form方式登錄時 ,它則必須輸入與用戶的用戶名和密碼才能進入系統(也就是說對於AD用戶,由於AD用戶在我們系統中沒有密碼,所以如果是第一次用Form 方式登錄,系統將會發送密碼郵件給該用戶,該用戶用該密碼登錄系統,登錄后可以修改密碼)

當由於我們網站設為window驗證方式:對於非域的用戶將總是提示請輸入域用戶信息的對話框,因此我們需要在401錯誤頁面截取,但我們可以通過配置 customErrors 實現

         <!--<customErrors mode="On" defaultRedirect="GenericErrorPage.htm">-->
          <customErrors mode="Off">
          <error statusCode="401" redirect="/SysAdmin/Login.aspx" />
         <!--
            <error statusCode="403" redirect="NoAccess.htm" />
            <error statusCode="404" redirect="FileNotFound.htm" />-->
        </customErrors>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM