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
WCF Data Service安全分析和说明相关推荐
- WCF Data Service文章列表
张善友blogs,有不少文章 http://www.cnblogs.com/shanyou/category/240225.html WCF Data Service安全分析和说明 http://ww ...
- WCF Data Service 的.NET Client 的不支持原生类型服务操作的解决方法
WCF Data Service 的.NET Client 的不支持返回值为原生类型(string,int)的服务操作调用,例如我们用如下服务操作: [WebGet] public ObjectQu ...
- 【转】WCF Data Service 使用小结(二) —— 使用WCF Data Service 创建OData服务
在 上一章 中,介绍了如何通过 OData 协议来访问 OData 服务提供的资源.下面来介绍如何创建一个 OData 服务.在这篇文章中,主要说明在.NET的环境下,如何使用 WCF Data Se ...
- 【转】WCF Data Service 使用小结 (一)—— 了解OData协议
最近做了一个小项目,其中用到了 WCF Data Service,之前是叫 ADO.NET Data Service 的.关于WCF Data Service,博客园里的介绍并不多,但它确实是个很好的 ...
- HTTP Basic Authentication验证WCF Data Service
WCF Data Service是OData协议,也是RESTFul Service的一种,上篇文章已经介绍了HTTP Basic Authentication for RESTFul Service ...
- WCF Data Service 创建OData服务
WCF Data Service 是需要 ORM 的支持的, 主流的 ORM 都已经支持 WCF Data Service 了, Entity Framework.Linq to SQL.ALinq ...
- Silverlight通过Wcf Data Service访问数据库之ADO.NET Entity Framework篇
转载于:https://www.cnblogs.com/zxbzl/p/3585738.html
- 如何消费WCF Data Services定义的服务操作
Service Operations (WCF Data Services)描述了如何 自定义WCF Data Service的服务.客户端如何消费可以参考文章Service Operations a ...
- WCF Data Services 基础
把最近使用的WCF Data Service和WCF RIA Service的使用例子发布在站点http://dskit.codeplex.com , 本系列文章就把WCF Data Service和 ...
最新文章
- Ubuntu 安装软件方法
- SAP PM 入门系列4 - 如何手工触发一个新的PM检验批?
- 使用BCH提供的客户端将消息绑定到任何位置
- 【Java Web开发指南】Java插入中文到数据库中文变成问号解决
- android 自定义actionbar前面有一块空白,解决Android V7后自定义Toolbar、ActionBar左侧有空白问题...
- 关于Visual Basic 10.0
- 软件项目管理0628:出差面临的问题
- 论文浅尝 - COLING2020 | 一种用于跨语言实体对齐的上下文对齐强化跨图谱注意力网络...
- 编程寓言:两位新手正讨论常用快捷键,路边乞丐直接说出答案!
- 数据结构-图的基础代码
- java new对象_Java中new一个对象是一个怎样的过程?JVM中发生了什么?
- java如何输出完整的图_java实现输入输出图片
- Android加载服务器的静态图片文件
- 虚拟机未正常关闭,结果再次启动的时候打不开了?
- 篮球英文术语翻译与解释 (以A至E为限)
- Stata 基础知识 1
- ewebeditor漏洞之目录遍历漏洞
- 蓝牙心率检测仪涉及到的主要硬件组成
- 最新最全论文合集——SODA 历年最佳论文汇总
- Entity层、DAO层、Service层、Controller层 先后顺序