1. 程式人生 > >ASP.NET 身份驗證機制

ASP.NET 身份驗證機制

ASP.NET提供了3種認證方式:windows身份驗證、Forms驗證和Passport驗證。
windows身份驗證: IIS根據應用程式的設定執行身份驗證。要使用這種驗證方式,在IIS中必須禁用匿名訪問。
Forms驗證:用Cookie來儲存使用者憑證,並將 未經身份驗證的使用者重定向到自定義的登入頁。
Passport驗證:通過Microsoft的集中身份驗證服務執行的,他為成員站點提供單獨登入和核心配置檔案服務。

我這裡詳解Forms驗證方式,在ASP.NET專案中的實際應用與深度理解。

對於ASP.NET驗證機制在專案開發中運用,會使專案非常方便快捷的實現頁面的訪問許可權問題,而且省去了一些沒必要的安全問題。

對於ASP.NET提供的驗證機制,要深度的理解後才能靈活的運用。對於整個專案的訪問許可權,有時候我們需要對部分頁面的訪問許可權進行限制,又不影響其他公共頁面的訪問。舉個實際專案的例子。

案例:有一個ASP.NET的專案,對整個專案訪問限制,不允許匿名使用者訪問,登入頁面除外。

  問題是,登入頁面(假設是:Manager目錄下的Login.aspx檔案)中應用了Script的一個檔案(假設這個檔案是:Script/jquery-1.7.1.min.js),同時,登入頁面用到了Code目錄下面的ValidateCode.ashx檔案來生成驗證碼的圖片。要求整個網站只有當用戶登入之後才能訪問。

思路:首先,我們限制整個根目錄站點不允許匿名使用者訪問,否則將跳轉到登入頁面。其次,登入頁面用到了jQuery開發的js特效,引用了Script資料夾下面的jquery-1.7.1.min.js檔案,我們讓匿名用能訪問這個檔案。最後,登入頁面用到了Code目錄下的ValidateCode.ashx檔案來生成驗證碼圖片,所以能讓匿名使用者訪問這個檔案。

1.web.config配置檔案

a.配置程式不允許匿名使用者訪問網站,否則跳轉到登入頁面。path='/'表示根目錄即限制整個站點不允許匿名使用者,也可以只限制某一個資料夾下面的頁面不允許匿使用者訪問。<deny users="?"> 限制匿名使用者,"?"表示匿名使用者,“*”表示所有使用者。

複製程式碼
<!--配置Forms身份認證 不允許匿名使用者訪問,否則跳轉到/Manager/login.aspx 頁面 -->
      <authentication mode="Forms">
        <forms name="myTeacher" loginUrl
="~/Manager/login.aspx" protection="All" path="/" timeout="60"></forms> </authentication> <authorization> <deny users="?"/> </authorization>
複製程式碼

b.當用戶開啟程式時,會自動轉到Manager/login.aspx頁面,但是這個頁面引用的jquery-1.7.1.min.js檔案是不可用的。因為,限制了所有的匿名使用者只能訪問Login.aspx頁面,只有當註冊票據之後其它的頁面或檔案才能正常訪問。所以當匿名使用者需要有許可權訪問jquery-1.7.1.min.js檔案,就需要設定某個檔案或者檔案的訪問許可權為所有使用者。

複製程式碼
  <!--允許所有使用者訪問Script資料夾-->
    <location path="Script">
      <system.web>
        <authorization>
          <allow users="*" />
        </authorization>
      </system.web>
    </location>
複製程式碼

c.所以,根據上面可知,驗證碼圖片是不能顯示的。我們把生成驗證碼檔案,配置為允許匿名使用者訪問,如下程式碼:

複製程式碼
<!--允許所有使用者訪問Code/ValidateCode.ashx檔案,這個是用來生成驗證碼圖片-->
  <location path="Code/ValidateCode.ashx">
    <system.web>
      <authorization>
        <allow users="*" />
      </authorization>
    </system.web>
  </location>
複製程式碼

這裡用到的完整程式碼如下:

複製程式碼
  <!--允許所有使用者訪問Script資料夾-->
    <location path="Script">
      <system.web>
        <authorization>
          <allow users="*" />
        </authorization>
      </system.web>
    </location>
  
  <!--允許所有使用者訪問Code/ValidateCode.ashx檔案,這個是用來生成驗證碼圖片-->
  <location path="Code/ValidateCode.ashx">
    <system.web>
      <authorization>
        <allow users="*" />
      </authorization>
    </system.web>
  </location>
  
    <system.web>
      <customErrors mode="On" defaultRedirect="../error.aspx"/>

      <!--配置Forms身份認證 不允許匿名使用者訪問,否則跳轉到/Manager/login.aspx 頁面 -->
      <authentication mode="Forms">
        <forms name="myTeacher" loginUrl="~/Manager/login.aspx" protection="All" path="/" timeout="60"></forms>
      </authentication>
      <authorization>
        <deny users="?"/>
      </authorization>
複製程式碼

說明:這裡的思路是先禁止所有的匿名使用者訪問整個站點,然後在釋放某個資料夾或檔案允許匿名使用者訪問,從而達到我們的需求。

   所以,我們也可以用不同的思路來進行限制,比如:整個站點配置為允許任何人訪問,在配置具體的資料夾和檔案不允許匿名使用者方面,從而達到我們的需求。其他的場景大同小異,總之,怎樣簡單便怎麼使用!

2.登入註冊票據

  當通過登入頁面登入提交併登入成功後,註冊票據。這時,註冊票據之後,相當於當前使用者的身份已經不是匿名使用者,沒有了訪問許可權的限制。FormsAuthentication的名稱空間是:System.Web.Security; 

1  FormsAuthentication.RedirectFromLoginPage(UserID, false);    //頁面註冊 關鍵 UsersID表示登入ID

3.撕毀票據(退出系統)

1 FormsAuthentication.SignOut();     //撕毀票據 退出登入