WCF Data Service安全分析和说明
首先需要知道服務運行在asp.net的承載環境中,具體參考:
http://blogs.msdn.com/b/wenlong/archive/2006/01/23/516041.aspx
關于安全有個詳細的參考地址:
http://blogs.msdn.com/b/astoriateam/archive/tags/authentication/
講述了涉及安全各個方面,是個很好的資料
本文就從常見的涉及安全的幾個方面進行分析和說明
服務端安全
由于服務承載在IIS中,因此可以使用Asp.net的安全模型,如一般的Forms驗證
對于服務一般的處理是,把服務放到一個獨立目錄下如Services,使用Services\web.config設置目錄的安全性,如下授予admins角色和d用戶以訪問權限:
<?xml version="1.0"?> <configuration> ?????? <system.web> ????????????? <authorization> ??????????????????? <allow roles="admins"/> ??????????????????? <allow users="d"/> ??????????????????? <deny users="*"/> ????????????? </authorization> ?????? </system.web> </configuration>以上設置后,匿名用戶就不可以訪問了
服務對象的安全
DataService<T>對象的設置,僅授予可以察看的數據對象以相應的權限,這樣客戶端就不會看到其他的對象,增刪改僅在必須的時候開放,或者把增 刪改放到一個獨立的不同權限的服務上 下例是設置一些限制的情況,如果不想讓客戶端看到更多的信息,可以把”*”條件移除,這樣就只能看到設置的對象了 ????????????? public static void InitializeService(DataServiceConfiguration config) ????????????? { ???????????????????????????????????????? config.SetEntitySetAccessRule("Orders", EntitySetRights.AllRead); ???????????????????? config.SetServiceOperationAccessRule("*", ServiceOperationRights.AllRead); ???? config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V2; ????????????? }默認查詢的限制
對于授予了權限的實體,也可以根據角色或用戶限定不同的范圍[如果不限制的話,如果不設置的話,默認可以訪問到整個表內容
下例設置后http://localhost:1287/Services/NorthWindService.svc/Orders 查詢就會根據用戶情況返回不同的值,這樣可以減少了數據暴露的范圍
?????? [QueryInterceptor("Orders")] ????????????? public Expression<Func<Order, bool>> OrderFilter() ????????????? { ??????????????????? if (Roles.IsUserInRole("admins")) ?????????????????????????? return (Order od) => true; ??????????????????? else ?????????????????????????? return (Order od) => od.ShipName.StartsWith("H"); ????????????? } 當然由于當前在WEB環境中,也可以直接使用HttpContext.Current.User或者HttpContext.Current其他對象完成用戶的限制等安全處理自定義查詢
這個根據查詢條件自然就限制住了,定義linq查詢條件時一定要把數據范圍限制作
設置安全后客戶端的訪問
? 網頁形式:瀏覽器中訪問網站時,會按照asp.net的安全模型進行處理,導航到登陸頁面,輸入用戶名、密碼,然后可以訪問服務
? 一般的應用程序:如Console程序、WinForm程序的處理方式有些差別,最簡單的步驟如下:
1、服務端開放Authentication_JSON_AppService.axd服務,只要web.config增加以下配置節后,客戶端即可訪問
?????? <system.web.extensions> ????????????? <scripting> ??????????????????? <webServices> ?????????????????????????? <authenticationService enabled="true" requireSSL="false"/> ??????????????????? </webServices> ????????????? </scripting> ?????? </system.web.extensions>2、客戶端設置”Client Application Service”[客戶端需要引用完整的.net框架,而不是Profile框架],再引用System.Web.dll
如上圖,URL設置到服務的根地址
具體的代碼:
驗證用戶
System.Web.Security.Membership.ValidateUser("d", "demo1234!");對Data Service的客戶端代理OnContextCreated方法增加處理,把登陸的信息設置上
namespace TestDS.North {public partial class NorthwindEntities{partial void OnContextCreated(){this.SendingRequest +=new EventHandler<SendingRequestEventArgs>(OnSendingRequest);}void OnSendingRequest(object sender, SendingRequestEventArgs e){ClientFormsIdentity id = Thread.CurrentPrincipal.Identity as ClientFormsIdentity;if(id!=null){((HttpWebRequest)e.Request).CookieContainer = id.AuthenticationCookies;}}} } 以上驗證后就可正常的訪問服務了 NorthwindEntities ctx = new NorthwindEntities(u); var ods = from c in ctx.Orders select c; foreach (var o in ods) {Console.WriteLine(o.ShipName); }轉載于:https://www.cnblogs.com/2018/archive/2010/10/22/1858070.html
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的WCF Data Service安全分析和说明的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【转】POWER MANAGEMENT
- 下一篇: ORACLE 10G DATAGUARD