.net WCF数据服务(Astoria)是否是业务线应用程序的良好选择?

.net WCF数据服务(Astoria)是否是业务线应用程序的良好选择?,.net,asp.net,asp.net-mvc,wcf,wcf-data-services,.net,Asp.net,Asp.net Mvc,Wcf,Wcf Data Services,我们的一位架构师正在为我们公司的下一代应用程序构建新的参考体系结构。该原型是一个ASP.NET MVC 2 web应用程序,位于WCF数据服务(Astoria)之上,并使用EntityFramework 4进行数据访问和对象映射 原型应用程序管理用户的角色,因此服务执行创建/更新/删除用户、向用户添加应用程序访问/能力/角色等操作。因此,从安全角度来看,任何人都不应该能够访问应用程序外的数据服务并执行任何这些操作 我最初认为WCF数据服务是用于OData实现和web上的“开放”服务,而业务线应用

我们的一位架构师正在为我们公司的下一代应用程序构建新的参考体系结构。该原型是一个ASP.NET MVC 2 web应用程序,位于WCF数据服务(Astoria)之上,并使用EntityFramework 4进行数据访问和对象映射

原型应用程序管理用户的角色,因此服务执行创建/更新/删除用户、向用户添加应用程序访问/能力/角色等操作。因此,从安全角度来看,任何人都不应该能够访问应用程序外的数据服务并执行任何这些操作


我最初认为WCF数据服务是用于OData实现和web上的“开放”服务,而业务线应用程序仍应使用传统的WCF服务,以实现其适应性、安全性和其他功能。我是不是离基地太远了?WCF数据服务是从MVC控制器调用的好选择吗?他们能像处理传统WCF服务一样轻松地处理身份验证和安全问题吗?

更新:

新问题基本上是“WCF数据服务能否限制访问?”,是的


这些问题很难回答,因为您尚未发布需求、SLA或安全需求。WCF数据服务适合我的LoB,但可能不适合你,这取决于你尚未发布的各种详细信息

两个想法:

1) WCF数据服务仅限于REST,没有与手动WCF服务相同的安全选项。你必须像克里姆林宫那样封锁一切吗?WCF数据服务可能不是你喜欢的


2) WCF数据服务非常适合于只读的“从产品中选择前50个*”类型的服务方法。通常,您必须为应用程序的每个实体类型编写两个WCF服务方法。通过在普通WCF服务的基础上利用WCF数据服务,您可以节省大量时间反复编写相同的读取方法。

OData是用于访问数据的协议,而不是用于保护数据。并没有标准的解决方案将对数据某些部分的访问限制为只访问特定的角色或帐户,就像在每个普通的SQL数据库中一样。大多数安全措施都基于“所有内容都是可见的,所有操作都是允许的,除非您针对特定情况另行指定”,而不是“默认安全”

当您希望使用OData从业务线应用程序中访问公司数据时,这是一个很大的障碍。如果您计划使用Ajax调用,您的OData必须在internet上可见,因此容易受到各种攻击。OData似乎是互联网上已有的公共数据的优秀协议,但据我所知,目前还没有OData提供商实现基于角色的即时许可


可以使用这种权限扩展标准WCF数据服务,但这是有代价的。根据我的经验,安全性不能事后添加,它必须是任何应用程序框架和数据存储设施的一个组成部分。你可能会抱最好的希望,但你总是需要做最坏的打算,不久就会有人在互联网上寻找不安全的OData源,其中包含个人和公司的敏感数据。

因为它只是一个演示体系结构的原型,没有任何与此特定应用程序相关的硬需求。但是,原型管理用户的角色,因此服务可以创建/更新/删除用户、向用户添加应用程序访问/能力/角色等。因此,从安全角度来看,任何人都不能在应用程序之外点击数据服务并执行这些操作。WCF数据服务本身不提供安全解决方案。它依赖于其他层来实现这一点(它允许挂钩使这变得更容易)。这是一个复杂的主题:-传输级安全性-依赖于HTTP,因此,例如SSL工作得很好。-授权-您可以在DS上实现自己的授权,同样依赖于HTTP,因此几乎任何与HTTP一起工作的授权方案都可以工作-即使是正常的WCF服务也不会阻止随机用户访问应用程序之外的服务。你需要保护WCF服务不受此影响,WCF数据服务也是如此。谢谢大家,这是一个很好的见解。不过,我想确保我没有将问题局限于安全性,问题主要是WCF数据服务为业务线应用程序供电是否可以接受(或是最佳做法)。看起来答案是“是的。”