在ASP.NET MVC应用程序中实现细粒度的安全(即授权)最好的机制是什么?(What is th

2019-07-03 11:48发布

假设一个高速的开发与制作一个有许多不同的用户访问的银行应用程序的任务。 每个人会想访问他或她自己的帐户信息,但不希望其他人访问它。 我想知道限制在MVC应用程序的访问,以便只有谁拥有的信息(或管理员)的用户可以访问它的最佳实践。

Authorize属性允许我们通过角色来限制。 虽然这是一个起点,似乎任何身份验证的用户可以访问任何其他用户的信息。

ActionFilters似乎提供了一小更精细的控制选项,可能能够使用来完成任务。 但是,我不清楚他们是否会推荐的方法。

任何指导或想法,欢迎。

Answer 1:

ActionFilter可能是一个很好的起点,但根据您的架构,你可能要考虑的外线防守是否足够好。

如果你基本上是建立一个单层ASP.NET MVC应用程序(也有可能是完全合理的理由来做到这一点),一个ActionFilter将提供防御是不够好,而在同一时间是非常简单的应用。

在另一方面,如果你的应用程序是一个多层应用程序,纵深防御是比较合适的。 在这种情况下,你应该甚至在数据访问层考虑在域模型应用授权逻辑,或者。 这将确保如果你曾经开发基于相同的域模型的另一个应用程序(如Web服务),授权逻辑仍然适用。

不管你做什么,我强烈建议你立足于IPrincipal的实际授权实现。

在一个更具体的笔记,你问关于这里是最好的基于ACL的授权模型:对每个用户配置文件设置ACL,默认情况下允许访问只有用户他/她自己和管理员。 如果/当你以后需要扩展应用程序,以允许其他用户的个人资料委派访问(我不知道这是否是在特定情况下,甚至远程现实做),你可以简单地做,通过添加新条目ACL。

在这种情况下,评估访问包括检索所述ACL对所请求的资源,并检查当前用户(的IPrincipal)是否被包括在访问控制列表。 这样的操作很可能涉及到外的过程操作(查找在数据库中ACL),通过后面的一个ActionFilter听起来像它可能隐藏某些性能问题隐藏得如此有它作为应用程序的一个隐含部分。 在这种情况下,我会考虑授权模型略偏显式/可见。



Answer 2:

根据我的看法,如果您有单层的应用则授权是最好的选择,也actionfilter是更好和更简单的使用。 但是,如果你的应用是多层,那么你每亩用访问控制列表[ACL]。



Answer 3:

我觉得你有它正确的,该ActionFilter方法是健全的。

我想创建一组从AuthorizeAttribute继承自定义操作过滤器。

除了授权的funnctionality属性,你可以简洁地实现了更为严格的所有者唯一策略。

HTH,



Answer 4:

如果你想要外部化的授权,你可以看看基于XACML实现。



文章来源: What is the best mechanism to implement granular security (i.e. authorization) in an ASP.NET MVC application?