萬盛學電腦網

 萬盛學電腦網 >> 網絡編程 >> .net編程 >> ASP.NET教程:19.2 身份驗證

ASP.NET教程:19.2 身份驗證

class="area">

Web安全處理的第一步便是身份驗證,即對於發送請求信息的用戶驗證其身份。用戶使用其證件來表明身份,證件的種類很多,最常用的是用戶名和密碼,驗證能夠辨別用戶身份是否真空,如果證件有效,則用戶將被允許進入系統,並被賦予一個合法的已知身份(Identity)。

ASP.NET驗證是通過驗證提供程序(Authentication Provider)來實現的,此提供程序是通過Web.config配置文件使用<authentication>進行控制的,其基本的使用語法如下:

折疊展開XML/HTML 代碼復制內容到剪貼板
  1. <configuration>
  2. <system.web>
  3. <authentication mode="Windows/Forms/Passport" />
  4. </system.web>
  5. </configuration>

ASP.NET提供了3種驗證用戶的模式,每一種驗證模式都是通過一個獨立的驗證提供程序來實現的。這3種驗證模式分別為Windows、Forms和Passport。Windows驗證通過IIS實現:Forms驗證是在開發人員自己的服務器上實現;而Passpart驗證則是通過微軟公司的訂閱服務實現。下面將分別進行介紹。

一、基於Windows的身份驗證模式

在Windows身份驗證模式下,ASP.NET依靠IIS對用戶進行身份驗證,並創建Windows訪問令牌來表示經過身份驗證的標識。IIS提供下列3種身份驗證策略對它接收的每個請求進行身份驗證:

1.基本身份驗證

基本身份驗證要求用戶以用戶名和密碼的形式提供證書以證明其標識。它是基於RFC 2617提出的Internet標准。Netscape Navigator和Microsoft Internet Explorer都支持基本身份驗證。用戶證書以不加密的Base64編碼格式從浏覽器傳送到Web服務器。由於Web服務器得到的用戶證書是不加密格式,因此Web服務器可以使用用戶證書發出遠程調用。

網頁注意:基本身份驗證只應與安全信道(通常是使用SSL建立的)一起使用。否則,用戶名和密碼很容易被網絡監視軟件竊取。如采使用基本身份驗證,應在所有頁(而不僅僅是登錄頁)上使用SSL(安全套接字層),因為在發出所有後續請求時都傳遞證書。

基本身份驗證的流程如下:

(1)客戶向服務器請求被限制的資源。

(2)Web服務器以“401 Unauthoried”進行響應。

(3)客戶端浏覽器接收到這條信息後,要求用戶輸入證件,通常是用戶名和密碼。

(4)然後,Web服務器使用這些用戶證件來訪問服務器上的資源。

(5)如果驗證失敗,用戶證件無效,則會返回步驟(2),重新以“401 Unauthoried”響應。

(6)如果驗證成功,則客戶浏覽器便通過身份驗證,可以訪問資源。

使用基本身份驗證方法來確保某些資源的安全,可以按照下列步驟來操作:

(1)首先,從“控制面板”窗口中打開“管理工具”窗口,然後選擇“Internet信息服務”選項。在打開的窗口中,展開結點。在“默認網站”節點下,選擇一個要確保其安全的目錄,用鼠標右鍵單擊該目錄(該目錄為“默認網站”節點下的虛擬目錄),從彈出的快捷菜單中選擇“屬性”命令.如圖1所示。

圖1 訪問要確保安全的目錄屬性
圖1 訪問要確保安全的目錄屬性

(2)在打開的對話框中,選擇“目錄安全性”選項卡。單擊“身份驗證和訪問控制”區域中的“編輯”按鈕。

(3)在打開的如圖2所示的“身份驗證方法”對話框中,取消“啟用匿名訪問”復選框的選中狀態,用戶必須通過驗證才能訪問該目錄,然後選中“基本身份驗證”復選框。

圖2 設置驗證屬性
圖2 設置驗證屬性

(4)單擊“確定”按鈕,結束身份驗證的設置,然後打開浏覽器窗口,在地址欄中輸入URL用以訪問剛剛設置安全性的資源,彈出對話框,要求用戶輸入證件信息。

(5)輸入Windows操作系統某個用戶賬戶對應的證件,例如登錄計算機時使用的用戶名和密碼。IIS將這些證件數據信息與Windows操作系統的用戶列表進行比較,從而決定批准或者拒絕該請求。如果驗證成功,則將批准用戶對資源的請求,網頁會正常顯示:如果驗證失敗,則對話框會不斷彈出,要求用戶輸入正確的證件信息。

2.摘要式身份驗證

與IIS 5.0一起推出的摘要式身份驗證與基本身份驗證類似,但它從浏覽器向Web服務器傳送用戶證書時采用MD5哈希算法加密,因此更為安全,不過它要求使用Internet Explorer 5.0或更高版本的客戶端以及特定的服務器配置。

摘要式身份驗證的流程如下:

(1)用戶向服務器請求被限制的資源。

(2)Web服務器將發送一個驗證請求,它使用“401 Unauthoried”進行響應。

(3)客戶端浏覽器在接收到該響應後,彈出對話框來詢問用戶的證件資料。當用戶輸入證件資料後,浏覽器會在提供的數據中加入一些唯一性的信息並對其進行加密。這些唯一性的數據確保以後任何人都無法通過復制這些加密後的信息來訪問服務器。

(4)客戶端浏覽器將加密後的證件以及未經加密的唯一性信息發送給服務器。

(5)Web服務器使用未經加密的唯一性信息來對Windaws操作系統的用戶列表中的用戶證件進行加密。然後逐一比較加密後的證件與浏覽器發送來的數據。

(6)如果證件無效(即加密後的證件與浏覽器發送來的數據無一相同),則回到步驟(2)繼續請求用戶證件資料。

(7)如果證件通過了身份驗證,浏覽器可以訪問請求的資源。

要啟用摘要式身份驗證,可以在圖2所示的“身份驗證方法”對話框中選中“Windows域服務器的摘要式身份驗證”復選框。如果服務器沒有連接到某個域中,則該復選框不可用。

網頁注意:使用摘要式驗證時,在“身份驗證方法”時話框中要同時確保“啟用匿名訪問”復選框沒有被選中。

3.集成的Windows身份驗證

集成Windows身份驗證時,不要求用戶輸入證件。相反,當浏覽器連接到服務器後,即將加密後的、用戶登錄計算機時使用的用戶名和密碼信息發送給服務器。服務器將對這些信息進行檢查,以確定用戶是否有權訪問。這一切驗證過程對用戶都是不可見的。

要啟用集成的Windows身份驗證,也可以在圖2所示的“身份驗證方法”對話框中選中“集成Windows身份驗證”復選框。

網頁注意:只有當服務器和客戶端機器都使用Windows操作系統時,集成Windows身份驗證才有效。如果選擇了多種驗證方法,則最嚴格的方法優先,例如,Windows驗證方法將覆蓋匿名訪問。

二、基礎窗體的身份驗證模式

在ASP.NET中,可以選擇由ASP.NET應用程序通過窗體驗證(Form authentication)進行身份驗證,而不是通過IIS。窗體驗證是ASP.NET驗證服務,它能夠讓應用程序擁有自己的登錄界面,當用戶試圖訪問被限制的資源時便會重定向到該登錄界面,而不是彈出登錄對話框。在登錄頁面中,可以自行編寫代碼來驗證用戶的證件資料。

1.安全處理流程

如果在ASP.NET中采用窗體驗證模式,則其安全處理流程如圖4所示。

安全處理流程的說明如下:

(1)客戶端向站點請求被保護的頁面。

(2)服務器接受請求,如果請求沒有包含有效的驗證Cookie,Web服務器把用戶重定向到Web.Config文件中authentication元素的loginURL屬性中指定的URL,該URL包含一個供用戶登錄的頁面。

(3)用戶在登錄界面中輸入用戶證件資料,並且提交窗體。如果證件有效,則ASP.NET將在客戶端創建一個驗證Cookie。驗證Cookie被設置後,以後的請求都將自動驗證,直到用戶關閉浏覽器為止,也可以將Cookie設置為永不過期,這樣用戶將總是能通過驗證。

圖4 安全處理流程
圖4 安全處理流程

(4)通過驗證後,檢查用戶是否有訪問所請求的赍源的權限,如果允許訪問,則將該用戶重新定向至所請求的網頁。

2.驗證用戶證件資料

在登錄界面中提交按鈕的Click事件處理程序中,可以進行用戶輸入的證件資料檢查,從而判斷證書資料是否正確,也就是身份驗證的過程。根據正確證件資料的存放位置的不同,可以將驗證方式劃分為以下3種,即在代碼中直接驗證、利用數據庫實現驗證和利用配置文件實現驗證。

例1 通過程序代碼直接驗證用戶身份。(實例位置:網頁ASP.NET 3.5教程案例資源\19\ch01)

開發人員可以將正確的用戶證件資料直接寫入代碼中,然後與用戶輸入的證件資料一一對比,從而判斷用戶證件資料是否正確。

開發人員可以將正確的用戶證件資料直接寫入代碼中,然後與用戶輸入的證件資料一一對比,從而判斷用戶證件資料是否正確。

執行程序並輸入用戶名和密碼,當單擊“登錄”按鈕時,首先判斷用戶輸入的信息是否與代碼中的資料相符,如果相符,則跳轉到另一頁,顯示“登錄成功”;否則,將會彈出消息對話框,提示用戶重新輸入,顯示“您的輸入有誤,請核對後重新登錄”。

下面具體介紹程序實現過程及代碼。

(1)打開網站的Web.config文件,並將其配置成使用基本窗體身份驗證。

首先,將<authentication>節設置為Forms模式,並在<authentication>節下的<forms>節中,配置要使用的Coo

copyright © 萬盛學電腦網 all rights reserved