在本文中,我將闡述使用Entity Framework(通過 Windows Communication Foundation (WCF) RESTful 服務公開 並用 Windows Azure 存取控制服務 (ACS) 保證安全),實施開放資料協議 (OData)。
如同大多數開 發人員,我經常發現自己試圖利用各種新方法綜合利用多種技術,以便儘可能高效地完成項目,同時還要提供 一種靈活、易於維護的解決方案。這樣做可能很困難,當項目需要快速安全地公開資料時尤其如此。
最近我需要為一個現有資料庫和 Web 應用程式建立一個安全的 Web 服務。我真的不想實施代碼的所有 CRUD (建立、讀取、更新、刪除)操作。僅僅建立自訂服務約定、操作約定和資料約定就非常誘人,這樣可以准 確實現如何公開資料,以及其他人如何通過服務使用這些資料。但是我知道必須採取一種更為有利的辦法。我 開始研究完成這項工作的各種方法,並看到 OData (我喜歡稱其為“哦資料”)的潛力。問題在於 OData 本 身並不安全,這是我不能接受的,所以我需要在 OData 服務之上添加一個安全層,這樣我才放心 OData 是有 安全保障的。當我開始著手之時,我發現了 ACS,ACS 非常適於實施雲端式的識別身分同盟和授權服務,這正 是我需要的。然後我覺得很得意。我意識到如果我將 ACS 與 OData 結合起來,我就得到解決方案了。
現在,我的確考慮實施自訂服務約定,實施這種方法是可行的,尤其是當資料模型前面需要一個抽 象層以及需要保護資料庫實體以防直接向服務消費者公開的情況下。然而,鑒於其非常耗時——建立關於如何 使用此服務的適當文檔,以及投入額外的努力以設定安全性(“MessageCredential”和 “TransportWithMessageCredentials”),所以這個項目可能會很快失控。我還擔心為了支援如何使用這些 服務而因為這樣或那樣的原因需要或請求額外的方法,這樣會再次增加時間、維護和自訂。即使服務的實施 直接使用了Entity Framework與 ADO.NET,仍然可能需要進行代碼的所有 CRUD,以便保持資料層的同步。假設有幾十 個表,這種工作可能非常單調乏味。而且,建立並維護任何附加的文檔和實施詳情以便讓終端使用者使用我的服 務,只會讓這項工作變成一個更加複雜的主張,難以管理。
更簡便的方法
我確認了主要技術之 後,我開始尋找其他技術來填補空缺並協助構建一套結合緊密的解決方案。目標是限制需要編寫或維護的代碼 數量,同時安全地公開我的 OData WCF RESTful 服務。我結合的技術是: ACS、OData、實體資料模型、WCF Data Services(具有實體許可)及一個自訂 Windows Azure 安全實施。每項技術都具有各自的重要價值,但結 合起來,他們的價值將大幅增加。圖 1 大體顯示了部分技術的工作原理概述。
圖 1 具備安全性截獲的 ACS 簡要概述
在試圖合并所有這些技術之前,我必須回頭,仔細瞭解每種技術以 及這些技術會對本項目有什麼影響。然後我清晰地掌握如何整合這些技術,以及其他人通過其他技術來使用我 的服務還需要哪些條件。