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);
}
				
时间: 2024-11-13 08:36:29

WCF Data Service安全分析和说明的相关文章

WCF Data Service与net.tcp承载分析

今天WCF Data Service部署在支持net.tcp的IIS站点上时会出现问题,通过分析和查找相关资料有了一些结论. http://www.rajneeshnoonia.com/blog/2009/12/ria-wcf-configuration-finally-resolved/ 这个是在VS2008下的早期版本正常,新的VS2010不可用 默认的绑定和查看 框架默认支持的绑定在web.config设置了 <serviceHostingEnvironment aspNetCompati

WCF Data Service的实例

为了打通客户端.网络.手机端等的数据平台,研究了八天的 REST接口架构. 首先是 WCF REST,了解了REST以及WCF REST.详细理论知识WCF REST ----理论准备工作 其次是实际应用,使用WCF Data Service,详细理论知识WCF Data Service ----理论准备 建立WCF Data Service网上包括MSDN都有很多实例. 第一步,建立一个Web应用程序 第二步,添加一个ADO.NET实体数据模型,如下图: 然后建立实体模型数据,连接相应的数据库

WCF Data Service使用总结(二) 使用WCF Data Service 创建OData服务

在 上一章 中,介绍了如何通过 OData 协议来访问 OData 服务提供的资源.下面来介绍如何创建一个 OData 服务.在这篇文章中,主要说明在.NET的环境下,如何使用 WCF Data Service 来创建OData服务.当然,对于 JAVA 或者其它平台,也是可以创建 OData 服务的.甚至是数据库,都可以提供 OData 服务. WCF Data Service 是需要 ORM 的支持的,当然,主流的 ORM 都已经支持 WCF Data Service 了,包括(但不限于)

WCF Data Service使用总结 (一)了解OData协议

最近做了一个小项目,其中用到了 WCF Data Service,之前是叫 ADO.NET Data Service 的.关于WCF Data Service,博客园里的介绍并不多,但它确实是个很好的框架.可以很方便地通HTTP来访问数据库,如果你是做富客户端开发的,用它绝对能大大减少你的工作量.出于对这个框架的喜爱,于是把自己的一些使用经验写下来,并且希望有更多的人能够用上. OData简介 说起 WCF Data Service ,不得不说的是 OData.对于一个标准的 Web 服务,它往

WCF Data Service工具包

WCF Data Service工具包是一组WCF Data Service(OData的.NET实现),目的是使更容易地构建WCF Data Service,支持数据的任何存储上的OData服务而不需要深入的理解Linq,当然了,深入的理解Linq的非常必要的. 它诞生于现实的一些服务,诸如Netflix, eBay, Facebook, Twitpic等等公司的公开的服务,这个工具包已经在现有的产品中使用,被证明解决了一些有趣的问题,而且在工作中发挥了很大的作用. 在使用这个工具包之前需要知

EntityFramework 5.0 + WCF Data Service 访问数据集时报错

问题描述 EntityFramework5.0+WCFDataService访问数据集的时候提示访问http://localhost/WcfService1/NorthwindService.svc正常访问http://localhost/WcfService1/NorthwindService.svc/Products则报错,查看跟踪文件提示无法将通信对象System.ServiceModel.Channels.TransportReplyChannelAcceptor+TransportRe

WCF Data Service Publish to IIS 7 Get 404

问题描述 大家好,我的环境是Window7IIS7VS2010.net4.0根据msdn的StepbyStep,制作了WCFDataService直接运行完全正常,可以访问http://localhost:xxx/service.svc可用IE9访问并且,此Service可以被Client引用但当我发布到IIS7后在IE9中访问http://localhost/service.svc得到的报错如下ServerErrorin'/'Application.----------------------

WCF Data Services实例:ASP.net AJAX访问

本文参考 Code.msdn的例子,在此基础上实现了一个参考例子,代码放在了: http://dskit.codeplex.com 如果想在Asp.net MVC应用以JavaScript中访问WCF Data Service服务,以下是使用Microsoft AJAX Library库进行处理的例子 var dataContext; var queryObject, queryObject1; Sys.require([Sys.components.dataView, Sys.componen

WCF Data Services查询

上一篇文章http://www.cnblogs.com/2018/archive/2010/10/15/1852579.html介绍了WCF Data Service的基础知识,下面介绍一下查询 查询在WCF Data Services十分的方便,更强的功能在这些类别中可以看到WCF Data Service的超级威力.可以直接在浏览器中输入查询表达式等进行访问 直接使用例子可从http://dskit.codeplex.com下载 查询表达式Query Expressions 一般的查询表达式