ASP.NET 身份驗證機制


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

關於這三種驗證方式的配置,推薦一篇博文:http://www.cnblogs.com/chenqingwei/archive/2010/07/12/1775472.html

 

我這里詳解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();     //撕毀票據 退出登錄

 

 

 


免責聲明!

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



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