首先需要知道服务运行在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安全分析和说明相关推荐

  1. WCF Data Service文章列表

    张善友blogs,有不少文章 http://www.cnblogs.com/shanyou/category/240225.html WCF Data Service安全分析和说明 http://ww ...

  2. WCF Data Service 的.NET Client 的不支持原生类型服务操作的解决方法

    WCF Data Service  的.NET Client 的不支持返回值为原生类型(string,int)的服务操作调用,例如我们用如下服务操作: [WebGet] public ObjectQu ...

  3. 【转】WCF Data Service 使用小结(二) —— 使用WCF Data Service 创建OData服务

    在 上一章 中,介绍了如何通过 OData 协议来访问 OData 服务提供的资源.下面来介绍如何创建一个 OData 服务.在这篇文章中,主要说明在.NET的环境下,如何使用 WCF Data Se ...

  4. 【转】WCF Data Service 使用小结 (一)—— 了解OData协议

    最近做了一个小项目,其中用到了 WCF Data Service,之前是叫 ADO.NET Data Service 的.关于WCF Data Service,博客园里的介绍并不多,但它确实是个很好的 ...

  5. HTTP Basic Authentication验证WCF Data Service

    WCF Data Service是OData协议,也是RESTFul Service的一种,上篇文章已经介绍了HTTP Basic Authentication for RESTFul Service ...

  6. WCF Data Service 创建OData服务

    WCF Data Service 是需要 ORM 的支持的, 主流的 ORM 都已经支持 WCF Data Service 了, Entity Framework.Linq to SQL.ALinq  ...

  7. Silverlight通过Wcf Data Service访问数据库之ADO.NET Entity Framework篇

    转载于:https://www.cnblogs.com/zxbzl/p/3585738.html

  8. 如何消费WCF Data Services定义的服务操作

    Service Operations (WCF Data Services)描述了如何 自定义WCF Data Service的服务.客户端如何消费可以参考文章Service Operations a ...

  9. WCF Data Services 基础

    把最近使用的WCF Data Service和WCF RIA Service的使用例子发布在站点http://dskit.codeplex.com , 本系列文章就把WCF Data Service和 ...

最新文章

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

热门文章

  1. auto register volatile 比较总结
  2. github 克隆项目过慢
  3. Gitblit用户没有push权限,但是已经在team里面配置了
  4. 设置tomcat使用指定的jdk版本
  5. Beta阶段项目总结
  6. Python 常用函数time.strftime()简介
  7. linux挂载windows共享的远程目录
  8. jQuery鼠标移入移出(冒泡版和无冒泡版)
  9. 使用hibernate实现树形结构无限级分类
  10. 设计模式复习-备忘录模式