程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> ASP.NET >> 關於ASP.NET >> ASP.NET 2.0應用中定制安全憑證之實踐篇

ASP.NET 2.0應用中定制安全憑證之實踐篇

編輯:關於ASP.NET

一、方案架構

本方案架構很簡單——它用一個Web服務來包裝ASP.NET 2.0提供者並且為遠 程客戶暴露該憑證管理,你甚至還能在該架構中加上一些失去的功能。然後,在 提供一個豐富的用戶接口和全面憑證管理經驗的同時,使用一個Windows表單應 用程序來消費該Web服務。該Web服務配置文件將包含特定於該憑證存儲的指令。 然而,這的確意味著所有由該Web服務管理的應用程序都將可以共享這些指令。

盡管你能夠從頭到尾地構建該Web服務,也就是說,首先用靜態方法Roles和 Membership來包裝它們並定義該Web服務,我卻更喜歡一種契約驅動的方法:首 先設計執行各種操作的最好接口將是什麼,並且直到需要時才考慮怎樣實現它們 。這樣做可以確保由Web服務暴露的接口支持所有要求的管理功能並且還將減少 該客戶應用程序與任何實現細節(例如包裝提供者)之間的耦合。

ASP.NET 2.0的一個更好的特點是它支持Web服務接口,你可以定義並且讓該 Web服務暴露邏輯接口,就象類的表現一樣。為此,你需要用WebServiceBinding 屬性修飾你的接口並且經由WebMethod屬性來暴露單個的接口方法。然後,你將 有一個派生於這個接口的類並實現該接口,而且編譯器將要求你支持該接口的所 有方法。

為了管理和交互於憑證存儲和Web服務配置,我定義了5個接口- IApplicationManager,IMembershipManager,IPasswordManager, IroleManager和IUserManager。

(一) IApplicationManager

該IApplicationManager接口顯示於所附源碼中的列表2,允許管理員刪除一 指定的應用程序-也就是說,從數據庫中刪除所有到它的參考並且刪除它的所有 用戶和角色。IApplicationManager允許從存儲中刪除所有的應用程序,並且它 能返回在該存儲中的所有應用程序的一個列表。注意,這個接口作為一個內部的 接口被定義-public或internal可見性修飾詞對Web服務接口都是無意義的。該接 口上的每個方法用WebMethod屬性加以修飾並有一個該方法的簡短描述。此外, 存取憑證存儲的所有方法都被設置為使用事務處理。這樣以來,兩種操作-如刪 除一應用程序和創建一用戶將在彼此完全隔離的情況下執行,從而保證了如刪除 所有用戶等復雜操作的原子性。.NET 2.0中的Web服務只能啟動一個新事務,而 且它是由WebMethod屬性的TransactionOption屬性來控制的。最後一點是把 WebServiceBinding屬性應用於接口上。這就指定該接口是一個客戶和服務都能 綁定到的Web服務接口。為了把該接口以一個WSDL契約方式暴露給外界,你需要 使用一個shim類。這個shim類的設計是必要的,因為你不能把一個接口作為一 Web服務暴露,而且你也不能在其上應用WebService屬性。這個shim類還將經由 WebService屬性為該接口命名空間定義。下面的代碼顯示了 IApplicationManagerShim抽象類的定義。

[WebService(Name="IApplicationManager",
Namespace="http://CredentialsServices",
Description="IApplicationManager is used to manage
applications. This web service is only
the definition of the interface. You
cannot invoke method calls on it.")]
abstract class IApplicationManagerShim : IApplicationManager{
  public abstract void DeleteApplication(string application);
  public abstract string[] GetApplications();
  public abstract void DeleteAllApplications();
}

因為IApplicationManagerShim是一個類,所以你可以把它暴露為一個Web服 務。因為它是一抽象類且所有方法被定義為抽象方法,所以不需要(也不能)實 現任何方法。為了使其看起來就象該接口,IapplicationManagerShim把 WebService屬性的屬性名設置為IApplicationManager(代替缺省的類名)。現在 ,你可以使用IApplicationManager.asmx文件來暴露該接口。

<%@ WebService Language="C#"
CodeBehind="~/App_Code/IApplicationManagerShim.cs"
Class="IApplicationManagerShim"%>

現在,如果你浏覽到IApplicationManager.asmx頁面,你就會看到該接口定 義。你可以使用WSDL.exe的serverInterface選項來把接口定義輸入到客戶端或 任何其它想綁定到該接口定義上的服務。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved