首先需要知道服务运行在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. Ubuntu 安装软件方法
  2. SAP PM 入门系列4 - 如何手工触发一个新的PM检验批?
  3. 使用BCH提供的客户端将消息绑定到任何位置
  4. 【Java Web开发指南】Java插入中文到数据库中文变成问号解决
  5. android 自定义actionbar前面有一块空白,解决Android V7后自定义Toolbar、ActionBar左侧有空白问题...
  6. 关于Visual Basic 10.0
  7. 软件项目管理0628:出差面临的问题
  8. 论文浅尝 - COLING2020 | 一种用于跨语言实体对齐的上下文对齐强化跨图谱注意力网络...
  9. 编程寓言:两位新手正讨论常用快捷键,路边乞丐直接说出答案!
  10. 数据结构-图的基础代码
  11. java new对象_Java中new一个对象是一个怎样的过程?JVM中发生了什么?
  12. java如何输出完整的图_java实现输入输出图片
  13. Android加载服务器的静态图片文件
  14. 虚拟机未正常关闭,结果再次启动的时候打不开了?
  15. 篮球英文术语翻译与解释 (以A至E为限)
  16. Stata 基础知识 1
  17. ewebeditor漏洞之目录遍历漏洞
  18. 蓝牙心率检测仪涉及到的主要硬件组成
  19. 最新最全论文合集——SODA 历年最佳论文汇总
  20. Entity层、DAO层、Service层、Controller层 先后顺序

热门文章

  1. poj(百练) 2743解题报告
  2. 【邮件】生产数据库优化第一步:重建索引
  3. 第二次团队作业-需求分析
  4. docker系列之file基本操作
  5. msp430入门学习31
  6. std::ostringstream::str()返回临时对象
  7. js生成验证码并验证 .
  8. Java语言编码规范(2)
  9. Intel汇编语言程序设计学习-第六章 条件处理-上
  10. POJ3160强连通+spfa最长路(不错)