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