asp.net 中使用者和角色的驗證

來源:互聯網
上載者:User
asp.net 本文引用下面的 Microsoft .NET Framework 類庫命名空間: • System.Web.Security
• System.Web.Principal

請求的安全性事件流
以下步驟簡要介紹了在用戶端發出請求時發生的事件序列: 1. 用戶端請求 IIS 伺服器上的一個 .aspx 頁。
2. 將用戶端憑據傳遞給 IIS。
3. IIS 對用戶端進行身分識別驗證,然後將經過身分識別驗證的標記隨用戶端請求一起傳送到 ASP.NET 背景工作處理序。
4. 根據 IIS 傳送的經過身分識別驗證的標記以及 Web 應用程式的配置設定,ASP.NET 決定是否在處理請求的線程上類比使用者。Microsoft Active Server Pages (ASP) 和 ASP.NET 的明顯區別是,ASP.NET 在預設情況下不再類比經過身分識別驗證的使用者。若要啟用類比,必須在 Web.config 檔案中將 identity 部分中的 impersonate 屬性設定為 true。

相關配置設定
IIS 在 IIS 設定資料庫中儲存與安全性有關的配置設定。但是,ASP.NET 在可延伸標記語言 (XML) (XML) 設定檔中儲存安全(及其他)配置設定。雖然從安全性的角度來看,這通常可簡化應用程式的部署,但應用程式採用的安全模型要求通過其設定檔 (Web.config) 來正確配置 IIS 設定資料庫和 ASP.NET 應用程式。

以下配置部分與 ASP.NET 安全性有關: • <authentication> 部分
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpgenref/html/gngrfauthenticationsection.asp
• <authorization> 部分
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpgenref/html/gngrfauthorizationsection.asp
• <identity> 部分
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpgenref/html/gngrfidentitysection.asp
• <machineKey> 部分
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpgenref/html/gngrfmachinekeysection.asp

身分識別驗證
身分識別驗證是指以下過程:擷取標識憑據(如使用者名稱和密碼),並對照某一頒發機構來驗證這些憑據。

ASP.NET 提供了四個身分識別驗證提供者: • 表單身分識別驗證
• Windows 身分識別驗證
• Passport 身分識別驗證
• 預設身分識別驗證

表單身分識別驗證
表單身分識別驗證是指以下系統:將未經身分識別驗證的請求重新導向到一個超文字標記語言 (HTML) (HTML) 表單,使使用者能夠在其中鍵入他們的憑據。在使用者提供憑據並提交該表單後,應用程式對請求進行身分識別驗證,然後系統以 Cookie 的形式發出身分識別驗證票證。此 Cookie 包含憑據或用於重新擷取標識的密鑰。瀏覽器的後續請求自動包含此 Cookie。


Windows 身分識別驗證
在 Windows 身分識別驗證中,IIS 執行身分識別驗證,並將經過身分識別驗證的標記傳遞給 ASP.NET 背景工作處理序。使用 Windows 身分識別驗證的優點是它需要的編碼最少。在將請求傳遞給 ASP.NET 之前,您可能需要使用 Windows 身分識別驗證來類比 IIS 進行驗證的 Windows 使用者帳戶。


Passport 身分識別驗證
Passport 身分識別驗證是 Microsoft 提供的集中式驗證服務,它為成員網站提供單一登入和核心設定檔服務。通常,當您需要跨越多個域的單一登入功能時,將使用 Passport 身分識別驗證。


預設身分識別驗證
當 Web 應用程式不需要任何安全功能時,將使用預設身分識別驗證;此安全提供者需要匿名訪問。在所有的身分識別驗證提供者中,預設身分識別驗證為應用程式提供了最高的效能。當您使用自己的自訂安全模組時,也可以使用此身分識別驗證提供者。


授權
授權是指驗證經身分識別驗證的使用者是否可以訪問請求資源的過程。

ASP.NET 提供以下授權提供者: • FileAuthorization
• UrlAuthorization

FileAuthorization
FileAuthorizationModule 類進行檔案授權,而且在使用 Windows 身分識別驗證時處於活動狀態。FileAuthorizationModule 負責對 Windows 存取控制清單 (ACL) 進行檢查,以確定使用者是否應該擁有存取權限。
UrlAuthorization
UrlAuthorizationModule 類進行統一資源定位器 (URL) 授權,它基於 URI 命名空間來控制授權。URI 命名空間可能與 NTFS 許可權使用的物理檔案夾和檔案路徑存在很大的差異。

UrlAuthorizationModule 實現肯定和否定的授權斷言;即,可以使用該模組有選擇性地允許或拒絕訪問使用者、角色(如 manager、tester 和 administrator)和謂詞(如 GET 和 POST)的 URI 命名空間的任意部分。


角色型安全性
ASP.NET 中角色型安全性類似於 Microsoft COM+ 和 Microsoft Transaction Server (MTS) 所使用的角色型安全性,不過它們之間也存在很大的差異。ASP.NET 中角色型安全性不僅限於 Windows 帳戶和組。例如,如果啟用 Windows 身分識別驗證和類比,使用者的標識就是 Windows 標識 (User.Identity.Name = "Domain\username")。可以檢查特定角色中成員的標識,並相應地限制其存取權限。例如:



Visual C# .NET 代碼
if ( User.IsInRole("BUILTIN\\Administrators"))
Response.Write("You are an Admin");
else if (User.IsInRole("BUILTIN\\Users"))
Response.Write("You are a User");
else
Response.Write("Invalid user");

如果使用的是表單身分識別驗證,則不會為經過身分識別驗證的使用者指派角色;您必須以編程方式執行此任務。若要為經過身分識別驗證的使用者指派角色,請使用身分識別驗證模組(本例中為表單身分識別驗證模組)的 OnAuthenticate 事件建立新的 GenericPrincipal 對象,並為其分配 HttpContext 的 User 屬性。以下代碼對此進行了說明:



Visual C# .NET 代碼
public void Application_AuthenticateRequest(Object s, EventArgs e)
{
if (HttpContext.Current.User != null)
{
if (HttpContext.Current.User.Identity.AuthenticationType == "Forms" )
{
System.Web.Security.FormsIdentity id = HttpContext.Current.User.Identity;
String[] myRoles = new String[3];
myRoles[0]= "managers";
myRoles[1]= "testers";
myRoles[2]= "developers";
HttpContext.Current.User = new System.Security.Principal.GenericPrincipal(id,myRoles);
}
}
}

若要檢查使用者是否屬於特定的角色並相應地限制其存取權限,請在 .aspx 頁中使用以下代碼(或類似的代碼):



Visual C# .NET 代碼
if (User.IsInRole("managers"))
Response.Write("You are a Manager");
else if (User.IsInRole("testers"))
Response.Write("You are a Tester");
else if (User.IsInRole("developers"))
Response.Write("You are a Developer");




聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.