0

我有一个 mvc 应用程序,我允许企业使用 https://storea.mydomain.com https://storeb.mydomain.com等登录

每个企业都创建了用户,我有一个将企业 ID 与 EmployeeId 匹配的表。我正在尝试锁定应用程序,以便经过身份验证的 businessA 用户无法访问来自 BusinessB 的信息。

我检查用户是否可以访问子域的最佳位置在哪里?我是否覆盖 OnActionExecuted 操作,检查子域是什么,然后查看会话值以查看它们是否匹配,如果不同则将它们注销。

或者这有更优雅的方式来做到这一点?

关于最佳实践的建议和建议会很棒!谢谢你

4

3 回答 3

1

自定义Authorize属性似乎是执行此操作的好地方。您可以覆盖AuthorizeCore您将有权访问 HttpContext 的方法,并且您将能够基于子域执行自定义授权逻辑。

于 2012-06-18T05:55:46.027 回答
0

据我了解,您的 MVC 应用程序使用单个数据库来存储您拥有的所有业务的信息。这就是为什么您会担心业务 A 访问业务 B 信息的原因。

所以对我来说,您的数据库是检查哪些信息可以访问每个用户的地方,具体取决于他们所属的业务。

我认为您甚至不需要为此使用子域。

于 2012-06-18T06:18:44.147 回答
0

在这种情况下,我使用存储库模式,并且在每个查询/数据访问中,您确保传入包含业务 ID 的 where 子句。前任:


select * from orders where orderid=@orderId and companyID=@companyId

对查询执行此操作非常重要,因为您希望数据规则到位以防止不正确的查询。例如,对 Authorize 属性执行此操作并不能保证有人没有篡改数据来加载另一家公司的信息。

此外,我还有http://mvcsecurity.codeplex.com/ 扩展来帮助保护存储在页面上的 id 以帮助防止篡改。

于 2012-06-18T14:40:48.417 回答