ASP.NET安全機制1–身分識別驗證和授權基礎篇

來源:互聯網
上載者:User

     這篇文章是為了對asp.net的身分識別驗證體系不熟悉的朋友準備的。所以如果您對身分識別驗證(authenticate )和授權(authorization )非常熟悉完全可以略過。 這篇文章重點介紹asp.net中的身分識別驗證和授權的概念及實現.

     當你建立了一個網站後,總是要考慮哪些資源(狹義的認為就是頁面)是可以直接存取的哪些資源是需要有限的訪問的。簡單而言,你需要一種機制能夠協助你判斷那些使用者才是一個合法的使用者(授權的使用者,一般需要經過“登入認證”的),這就是我要講的第一個概念:身分識別驗證機制。然而僅能判斷使用者是否是合法是不夠的,你還需要確定那些是資源是受限資源(狹義的講就是經過身分識別驗證的使用者才能訪問的)哪些資源是可以隨便訪問的,這就是我要講的第二個概念:授權。

 

     首先來解釋一下授權:簡單一點的授權概念就是如何設定哪些資源是可以訪問的而哪些資源是需要認證後的使用者才能訪問的一種機制。比如:Default.aspx一般是任何人都可以訪問的,然後Car.aspx(購物車頁面)是認證使用者才可以訪問的, 這是可想而知的。簡單啊!!

     複雜的情況下,授權不單單只是限制哪些資源可以直接存取而哪些不能。可以通過授權做到更為複雜的訪問限制,如管理員可以訪問後台資源而一般經過認證的使用者可以訪問前台的一些受限資源,沒有經過驗證的使用者可以訪問任意不受限資源之類的...。這種情境都依賴授權來完成。授權是整個安全概念中的一個基礎點。我們就將它作為起點來談談ASP.NET是如何利用授權的。

     在ASP.NET中我們總是要和一個檔案打交道,這個就是web.config檔案,它控制著你的整個ASP.NET程式的行為。授權也在這個檔案中有所體現。下面我們來看看WEB.CONFIG檔案中的一個片段。

在<system.web>配置節下我們可以如下設定

<system.web>
 <authorization>
  <deny users="?"/>
 </authorization>
</system.web>

 

 

上面的配置將限制任何未獲得認證的使用者(沒有登入的使用者)不能訪問任何資源。這個配置所帶來的效果是任何匿名使用者無法訪問任何資源(頁面)。這是授權的最簡單的體現。再看一個比較複雜的。

 

 

<authorization>
  <deny users="*"/>
  <allow roles="admin"/>
</authorization>

 

這個配置表明限制任何使用者訪問(不管是匿名使用者還是通過了認證的使用者)但如果這個使用者是屬於admin組的使用者可以訪問。更多的細節在稍後的章節中會涉及,這個僅僅只是為了理解授權而設計的幾個範例。

 

     簡單而言,其實授權就是限制哪些使用者有權利訪問哪些資源的一種機制。對安全概念而言,至少我認為理解授權是很重要的。

 

     接下來我們將要理解一下什麼是身分識別驗證。上面我不斷的提到匿名使用者和認證使用者,我們通常也稱認證使用者為獲得憑證的使用者。猶如看電影你需要憑票入內是一樣,你需要花錢獲得一張小票,它可以證明你是可以入內享受電影帶來的樂趣的。那如何驗證一個使用者(就是給使用者一個可以被系統識別的憑證)呢?這就是身分識別驗證機制所負責的。那麼身分識別驗證指的就是如何驗證一個使用者或給使用者發放有效可被系統識別的憑證的一種機制。

     同樣,我們看看ASP.NET是如何做的。在ASP.NET中身分識別驗證的方式有以下三種, Window, Form, Passport方式。

     Window身分識別驗證方式:是一種與IIS配合在一起的一種認證方式。在IIS中已經提供了匿名驗證、Windows 整合的 (NTLM) 身分識別驗證、Windows 整合的 (Kerberos) 身分識別驗證、基本(base64 編碼)身分識別驗證、摘要式驗證以及基於用戶端認證的身分識別驗證。以下是web.config檔案支援Window身分識別驗證的典型配置。它也是Asp.Net的預設驗證方式。

     

 

<system.web>
  <authentication mode="Windows"/>
</system.web>

     

     Form身分識別驗證方式:通過ASP.NET提供的登入頁面進行認證的一種方式,這也是最常見的一種驗證方式,也是我今天重點要講解的方式。以下是web.config檔案支援Form身分識別驗證的典型配置。

     

 

 

<system.web>
<authentication mode="Forms">
  <forms name=".ASPXFORMSAUTH" defaultUrl="default.aspx" path="/" 
          protection="All" loginUrl="SignIn.aspx" timeout="30"/>
   </authentication>
</system.web>

 

     Passport 身分識別驗證是由 Microsoft 提供的集中驗證服務,該服務為成員網站提供單一登入和核心設定檔服務。Passport 之所以讓使用者受益匪淺,原因在於使用者不必登入訪問受到限制的新資源或網站。

 

<system.web>
<authentication mode= "Passport"/>
</system.web>

 

     

     和授權一樣,身分識別驗證同樣在web.config檔案中體現了自己所在,只所以都利用設定檔只因為它控制著整個ASP.NET的應用行為。

 

     

     接下來,我將利用上面的概念完成一個簡單的例子,概要的看看身分識別驗證和授權是如何一起工作的。這下面的例子中我將使用Form身分識別驗證方式。

 

     1.我們建立一個名為SecurityWebSiteDemo的asp.net網站。

     

    

 

2.我們在建立的網站中建立一個web.config檔案。

 

     

 

  3.開啟web.config檔案在<system.web>配置節下寫入一下片段:

 

<authentication mode="Forms">
  <forms defaultUrl="Default.aspx" loginUrl="Login.aspx" path="/" 
       name=".ASPNETAUTHEN" />
</authentication>
<authorization>
  <deny users="?"/>
</authorization>

 

 以上的配置完成了幾件事情。

  1.設定當前的ASP.NET程式的身分識別驗證方式是Forms,並且在<forms>節中指出一下幾點:

     a.預設的頁面:Default.aspx.

     b.用於提供給使用者進行登入的頁面:Login.aspx

  2.授權配置為決絕任何未經過身分識別驗證的使用者進行登入。

 

3.通過上面的解釋我們知道Forms驗證方式需要我們自己提供一個頁面給使用者,以便使用者可以通過指定的頁面提交自己的驗證資訊(一般是使用者名稱加密碼)。所以我們需要自己建立一個Login.aspx頁面。

 

asp.net 2.0中為我們提供了一套有用的登入控制項,可以直接利用相關的控制項就可以了。如我拖入了一個Login控制項,它可以協助我收集使用者的必要資訊以便我們可以處理它。接下來我們需要編寫一些代碼來完成認證的過程(也被成為授予憑證的過程)。

 

 

1     protected void Login1_Authenticate(object sender, AuthenticateEventArgs e)
2     {
3         if (this.Login1.UserName == "Cai" && this.Login1.Password == "Cai")
4             e.Authenticated = true;
5         else
6             e.Authenticated = false;
7     }

Login控制項提供了一個Authenticate事件,我們可以通過設定事件參數e.Authenticated的值來確定當前的這個使用者是否可以獲得一個憑證(或是有效合法的使用者)。上面的代碼中我們可以看出,我們完全可以控制如何認定一個使用者。

 

到此程式建立完成,你可以設定Default.aspx頁面為起始頁,然後啟動調試。你會發現你得到的是Login.aspx頁面而不是Default.aspx頁面。再你填寫了正確的使用者名稱和密碼後你將看見Default.aspx頁面。

 

代碼下載

 

完成。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.