明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

ASP.NET2.0應(yīng)用中定制安全憑證之理論篇

[摘要]閱讀提要 在缺省狀況下,你只能使用Visual Studio 2005的一個(gè)本機(jī)實(shí)例來(lái)管理與ASP.NET 2.0一同發(fā)行的SQL Server數(shù)據(jù)庫(kù)中的安全憑證。本文將向你展示怎樣用一個(gè)Web服務(wù)來(lái)包裝ASP.NET 2.0提供者并通過(guò)使用一個(gè)Windows表單應(yīng)用程序來(lái)管理憑證存儲(chǔ)從而擴(kuò)展這種...
閱讀提要 在缺省狀況下,你只能使用Visual Studio 2005的一個(gè)本機(jī)實(shí)例來(lái)管理與ASP.NET 2.0一同發(fā)行的SQL Server數(shù)據(jù)庫(kù)中的安全憑證。本文將向你展示怎樣用一個(gè)Web服務(wù)來(lái)包裝ASP.NET 2.0提供者并通過(guò)使用一個(gè)Windows表單應(yīng)用程序來(lái)管理憑證存儲(chǔ)從而擴(kuò)展這種管理能力。

  如今,無(wú)論是互聯(lián)網(wǎng)還是企業(yè)內(nèi)部局域網(wǎng)程序一般都要求使用定制的方式來(lái)存儲(chǔ)和管理用戶帳戶和角色。為此,ASP.NET 2.0提供了一個(gè)現(xiàn)成的提供者模型和一個(gè)SQL Sever數(shù)據(jù)庫(kù)。不幸的是,只能通過(guò)Visual Studio 2005來(lái)管理該憑證數(shù)據(jù)庫(kù)且只能針對(duì)本機(jī)Web應(yīng)用程序。這無(wú)疑是非常不方便而且不能廣泛使用的。

  本文描述了一個(gè)超級(jí)用戶可以使用的完全定制的安全管理應(yīng)用程序。這個(gè)應(yīng)用程序通過(guò)用一個(gè)WEB服務(wù)對(duì)ASP.NET 2.0提供者進(jìn)行了包裝并增加了一些功能。本文詳細(xì)描述了其中的設(shè)計(jì)方法,面臨的問(wèn)題和包含在應(yīng)用程序中的技術(shù)。同時(shí)還向你介紹了一些有用而強(qiáng)有力的技術(shù),如基于接口的Web服務(wù),基于反射的Web服務(wù)兼容性,高級(jí)C# 2.0編程,Web服務(wù)安全性和Web服務(wù)事務(wù)等。

  一、ASP.NET 2.0憑證基礎(chǔ)結(jié)構(gòu)

  基于互聯(lián)網(wǎng)的應(yīng)用程序常常不依賴Windows帳戶和組,而是依賴于基于表單的認(rèn)證并結(jié)合某種如SQL Server的后臺(tái)定制憑證存儲(chǔ)。為了幫助開(kāi)發(fā)者免除重復(fù)設(shè)計(jì)和構(gòu)建這樣的解決方案,ASP.NET 2.0發(fā)行中加入了一個(gè)現(xiàn)成的安全憑證基礎(chǔ)結(jié)構(gòu)。ASP.NET 2.0憑證存儲(chǔ)并不僅可用于ASP.NET應(yīng)用程序,而且ASP.NET Web服務(wù)和Windows表單應(yīng)用程序都能使用它來(lái)管理它們的用戶憑證。另外,Windows通訊基礎(chǔ)(編碼名為Indigo)服務(wù)也能被容易地設(shè)置來(lái)使用ASP.NET 2.0安全憑證存儲(chǔ)。

  ASP.NET 2.0使用一提供者模型來(lái)訪問(wèn)和管理憑證以避免把應(yīng)用程序耦合到任何特定存儲(chǔ)上。在利用抽象提供者模型的優(yōu)點(diǎn)的同時(shí)由程序員來(lái)開(kāi)發(fā)這個(gè)應(yīng)用程序。超級(jí)用戶負(fù)責(zé)選擇和管理特定的憑證存儲(chǔ)。圖1顯示出ASP.NET 2.0安全提供者的架構(gòu)。

ASP.NET2.0應(yīng)用中定制安全憑證之理論篇

圖1.ASP.NET 2.0安全提供者模型
  Membership Provider負(fù)責(zé)管理用戶,而Role Provider負(fù)責(zé)管理角色。在憑證存儲(chǔ)中,每個(gè)用戶或角色僅限于一應(yīng)用程序之內(nèi)。這樣就允許不同應(yīng)用程序使用一樣的憑證存儲(chǔ)而不會(huì)與彼此的用戶名或角色相沖突。ASP.NET為SQL服務(wù)器、Windows和活動(dòng)目錄(見(jiàn)圖1)等的憑證存儲(chǔ)提供支持。為了安裝SQL Server憑證數(shù)據(jù)庫(kù),可以運(yùn)行aspnet_regsql.exe程序,其位置是:

<WINDOWS>\Microsoft.NET\Framework\<version>

  這個(gè)安裝程序創(chuàng)建一個(gè)稱為aspnetdb的新數(shù)據(jù)庫(kù)-它包含一組應(yīng)用程序的表、用戶、角色以及存取這些表的存儲(chǔ)過(guò)程。這個(gè)SQL Server數(shù)據(jù)庫(kù)是運(yùn)用最新的安全技術(shù)經(jīng)過(guò)精心設(shè)計(jì)的。另外,ASP.NET 2.0還提供一套相應(yīng)于提供者的類(圖1)。

  使用哪個(gè)提供者的信息被保存在應(yīng)用程序的配置文件(App.Config或Web.Config)中。你幾乎不需要直接與特定的提供者進(jìn)行交互;而是,存在兩個(gè)靜態(tài)助理類:Membership和Roles-它們負(fù)責(zé)從配置文件中讀取使用哪個(gè)提供者。默認(rèn)的提供者(即當(dāng)沒(méi)有指定提供者時(shí))就是SQL Server。Membership類(列表1)允許你創(chuàng)建和刪除用戶,檢索關(guān)于用戶的信息并觀看口令策略。

  列表1: Membership助理類

[Serializable]
public class MembershipUser{
 public virtual bool ChangePassword(string oldPassword,string newPassword);
 public virtual string GetPassword(string passwordAnswer);
 public virtual string ResetPassword(string passwordAnswer);
 public virtual bool UnlockUser();
 //其它成員
}
public static class Membership{
 public static string ApplicationName{get;set;}
 public static MembershipUser CreateUser(string username, string password);
 public static MembershipUser CreateUser(string username, 
 string password, string email, string passwordQuestion,
 string passwordAnswer, bool isApproved, out MembershipCreateStatus status);
 public static bool DeleteUser(string username,bool deleteAllRelatedData);
 public static MembershipUser GetUser(string username);
 public static void UpdateUser(MembershipUser user);
 public static bool ValidateUser(string username,string password);
 public static bool EnablePasswordReset{get;}
 public static bool EnablePasswordRetrieval{get;}
 //其它成員
}
  例如,為了在"MyApp"應(yīng)用程序中創(chuàng)建一新用戶,你僅需如下編碼: 

Membership.ApplicationName = "MyApp";
Membership.CreateUser("MyUser","MyPassword",...);
  Roles類允許你創(chuàng)建和刪除用戶角色,從角色中添加或刪除用戶,檢索用戶的角色會(huì)員信息以及驗(yàn)證角色會(huì)員。下面是該類的定義:

public static class Roles{
 public static string ApplicationName{get;set;}
 public static void CreateRole(string roleName);
 public static bool DeleteRole(string roleName, bool throwOnPopulatedRole);
 public static void AddUserToRole(string username, string roleName);
 public static void RemoveUserFromRole(string username, string roleName);
 public static string[] GetAllRoles();
 public static string[] GetRolesForUser(string username);
 public static string[] GetUsersInRole(string roleName);
 public static bool IsUserInRole(string username, string roleName);
 //其它成員
}
  例如,要把角色"Manager"添加到應(yīng)用程序"MyApp"上,你可以如下編碼:

Roles.ApplicationName = "MyApp";
Roles.CreateRole("Manager");

[1] [2]  下一頁(yè)