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

來源:互聯網
上載者:User

一、方案架構

本方案架構很簡單——它用一個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選項來把介面定義輸入到用戶端或 任何其它想綁定到該介面定義上的服務。

聯繫我們

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