在Breeze中处理Multitenant安全性的最佳实践是什么?

时间:2013-10-12 14:50:30

标签: entity-framework azure asp.net-web-api breeze dotnetopenauth

我正在使用此堆栈开发Azure应用程序:

(客户)Angular / Breeze

(服务器)Web API / Breeze Server / Entity Framework / SQL Server

对于每个请求,我想确保用户实际上拥有使用服务器端代码执行该操作的授权。我的问题是如何在Breeze / Web API上下文中最好地实现它。

是最好的策略:

  1. 修改Web API控制器并尝试分析其内容 微风请求在将它传递到链条之前进一步?

  2. 修改EFContextProvider并添加授权测试 每种方法都曝光了吗?

  3. 将安全性全部移动到数据库层中,并确保每个查询都需要用户GUID和租户GUID参数,并且只返回相关数据?

  4. 其他一些解决方案,或上述的一些组合?

1 个答案:

答案 0 :(得分:1)

如果您使用的是Sql Azure,那么一个选项就是使用Azure Federation来实现这一目标。

在一个非常简单的术语中,如果您的表中有TenantId存储来自多个租户的数据,那么在执行SELECT Col1 FROM Table1之类的查询之前,您执行USE FEDERATION ...语句以将查询结果限制为特定的TenantId只是,您不需要在查询中添加WHERE TenantId = @ TenantId,

USE FEDERATION示例:http://msdn.microsoft.com/en-us/library/windowsazure/hh597471.aspx

请注意,在构建数据库模式时,使用Sql Azure Federation会附带大量字符串,这是我发现的最佳博客之一http://blogs.msdn.com/b/cbiyikoglu/archive/2011/04/16/schema-constraints-to-consider-with-federations-in-sql-azure.aspx