我们的一位架构师正在为我们公司的下一代应用程序构建一个新的参考架构。该原型是一个ASP.NET MVC 2 Web应用程序,位于WCF数据服务(Astoria)之上,并使用EntityFramework 4进行数据访问和对象映射。
原型应用程序管理用户的角色,因此服务执行诸如创建/更新/删除用户,向用户添加应用程序访问/能力/角色等事情。因此从安全角度来看,没有人能够达到应用程序之外的数据服务,并执行任何这些操作。
我原本以为WCF数据服务是用于OData实现和Web上的“开放”服务,并且该业务应用程序应该仍然使用传统的WCF服务来实现其适应性,安全性和其他功能。我离开基地吗? WCF数据服务是从MVC控制器调用的不错选择吗?他们能像传统的WCF服务一样轻松处理身份验证和安全性等事情吗?
答案 0 :(得分:1)
<强>更新强>
新问题基本上是“WCF数据服务可以限制访问吗?”,是的。
这些问题很难回答,因为您尚未发布您的要求,SLA或安全需求。 WCF数据服务适用于我的LoB,但根据您尚未发布的各种详细信息,可能不适用于您的。
两个想法:
1)WCF数据服务仅限REST,并且没有与手动WCF服务相同的选项安全性。你必须像克里姆林宫一样锁定一切吗? WCF数据服务可能不是您的一杯茶。
2)WCF数据服务非常适合只读“SELECT TOP 50 * FROM PRODUCT”类型的服务方法。通常,您必须为应用的每种实体类型编写几种WCF服务方法。通过在普通WCF服务之上利用WCF数据服务,您可以节省大量时间一遍又一遍地编写相同的读取方法。
答案 1 :(得分:1)
OData是一种用于访问数据的协议,而不是用于保护数据的协议。没有标准的解决方案来限制对数据的某些部分的访问仅限于特定的角色或帐户,就像在每个普通的SQL数据库中一样。大多数安全措施都基于“一切都是可见的,除非您为特定情况另行指定”,否则允许所有操作,而不是“默认安全”。
如果您想使用OData从业务应用程序内部访问公司数据,这是一个很大的障碍。如果您计划使用Ajax调用,则必须从Internet上看到OData,因此容易受到各种攻击。 OData似乎是互联网上已有的公共数据的一个很好的协议,但据我所知,目前没有OData提供商开箱即用地实现基于角色的权限。
可以使用这种权限扩展标准WCF数据服务,但这需要付出代价。我从经验中知道,之后不能添加安全性,它必须是任何应用程序框架和数据存储设施的组成部分。您可能希望最好,但您总是需要计划最坏的情况,并且不久之后有人会在互联网上查找包含个人和公司敏感数据的无担保OData来源。