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和 ...
最新文章
- Linux编译lclntsh,Linux下编译C/C++时,出现/usr/bin/ld: cannot find -l*** 错误的处理
- 19年NAACL纪实:自然语言处理的实用性见解 | CSDN博文精选
- 第十五届全国大学生智能汽车竞赛ROS组车模线上比赛
- Ubuntu下安装make
- sql语句分别按日,按周,按月,按季统计金额
- eclipse中tomcat启动不了_Eclipse怎样与Tomcat集成
- 灵魂拷问!细数Android开发者的艰辛历程,成功入职阿里
- 【转】1.3异步编程:线程同步基元对象
- 通用唯一识别码UUID
- 《Easy RL:强化学习教程》出版了!文末送书
- 免费人脸识别工具可以跟踪社交媒体网站上的人
- bzoj3203 [Sdoi2013]保护出题人 凸包+二分
- 64位linux下的gns3网络模拟器配置
- IDEA 设置文档注释
- Quartus17下载程序进FPGA
- 含本土测量软件的Q-Vision+Kvaser CAN/CAN FD/LIN总线解决方案
- 算法设计与分析基础 第四章谜题
- 左手云通讯,右手AI,容联为何能成为云联络中心“风向标”?
- DS18B20读取温度并显示在数码管上
- STM32红外寻迹小车