各位好,向大家请教如下问题:
1. 如何为ADO.NET Data Service的服务启用身份验证和授权。假设客户端为Windows Forms程序。
我之前在网上看到有朋友通过Forms验证的方式实现了身份验证和授权,但那是使用在ASP.NET网站内部的。也就是客户端与服务同在一个网站内部。我想这种情况应该很少吧。
我们一般都是想把服务独立出来,然后客户端(可以是Windows Forms,也可以说WPF,也可以是ASP.NET网站)通过远程访问。
我原本的想法是,既然ADO.NET Data Service是通过WCF实现的,那么是不是可以使用WCF的方式来配置安全性。但没有找到这方面的资料。
2. 另外问一个与该问题相关的问题:侦听器
我看到在ADO.NET Data Service中,可以通过定制所谓的侦听器来实现对查询,更新行为进行控制。我的问题是,是不是一个实体就只能有一个侦听器?
谢谢
为什么微软要推 ADO.NET Data Services Framework
http://www.cnblogs.com/WizardWu/archive/2008/12/14/1354490.html
-----------------------------------------------------------------------
Data Services 自有一套控管机制。
在 Server-side 项目建立、加入一个 ADO.NET
Data Service item 时,会同时产生
WebDataService.svc、WebDataService.cs
这两个档案,server-side 的程序员,就可在这个 WebDataService.cs 里做相关设定,如下 :
config.SetEntitySetAccessRule("*", EntitySetRights.All);
config.SetEntitySetAccessRule("*", EntitySetRights.AllRead);
config.SetEntitySetAccessRule("*", EntitySetRights.None);
config.SetEntitySetAccessRule("MyEntityset", EntitySetRights.WriteDelete);
您可参考以下的类库、API,以及 MSDN 和相关网络文件:
IDataServiceConfiguration..::.SetEntitySetAccessRule 方法 :
-----------------------------------------------------------------------
拦截器 :
可拦截 Request / Response,插入自定义的 authentication 验证辑。其可在 .svc 里去定义。
// 自定义拦截器-查询
[QueryInterceptor("Employees")]
public
Expression<Func<NorthwindModel.Employees, bool>> FilterChina()
{
return p=>p.Country=="China";
}
----------------------
QueryInterceptorAttribute 类 (msdn library)
方法上的
QueryInterceptorAttribute 将其批注为指定实体集上的查询拦截器。
命名空间: System.Data.Services
程序集: System.Data.Services(在 System.Data.Services.dll 中)
http://msdn.microsoft.com/zh-cn/library/system.data.services.queryinterceptorattribute.aspx
实体集级别授权和验证由使用 QueryInterceptorAttribute 批注的方法实现。ADO.NET
数据服务未实现安全策略,而是提供了必需的基础结构,以便服务开发人员编写自己的安全规则和业务验证。
----------------------
.NET Framework 3.5增强特性学习工具包已发布 :
http://www.edufly.cn/tech/ms/200805/204.html
你也可以使用服务拦截器增加加验证支持和自定义查询的服务操作。