明輝手游網(wǎng)中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

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

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

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

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

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

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

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

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

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

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

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

  使用哪個提供者的信息被保存在應(yīng)用程序的配置文件(App.Config或Web.Config)中。你幾乎不需要直接與特定的提供者進行交互;而是,存在兩個靜態(tài)助理類:Membership和Roles-它們負責從配置文件中讀取使用哪個提供者。默認的提供者(即當沒有指定提供者時)就是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)建和刪除用戶角色,從角色中添加或刪除用戶,檢索用戶的角色會員信息以及驗證角色會員。下面是該類的定義:

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]  下一頁