在Web API / OWIN中使用大型声明列表的最佳实践

时间:2014-10-17 13:18:18

标签: asp.net-web-api owin claims-based-identity thinktecture-ident-server

我正在尝试使用Web API / OWIN / OAuth实现基于声明的授权设置,并且我正在尝试找出管理更细粒度授权类型的最佳方法。

我不喜欢只使用角色的想法,因为在我正在处理的应用程序中需要有大量细粒度的授权。我认为角色+权限方法更有意义(角色只是映射到权限的子集)。权限将基于动作+资源对(例如CanViewEmployee,CanEditEmployee等)。这里没什么不寻常的。

但是,我想知道如何使用OWIN / OAuth实现这一点,可能使用Thinktecture IdentityServer。我试图避免在自定义AuthorizationManager中硬编码权限,因为它们需要在不重建的情况下轻松更改。我知道可以选择将这些作为策略放在web.config中(将资源+操作映射到声明类型和值),但如果我们谈论的是几十个,甚至几百个权限,这似乎可以得到也很快失控。

我想第三种选择是从数据库中驱动它,但是从那里管理它也需要某种前端才能这样做,这比仅更改配置/ XML文件更省力。 / p>

在涉及到大量的声明/权限时,我是否遗漏了一些其他选项/最佳做法,或者当数字失控时,我可以使用其他一些实用程序或程序包来帮助管理这些?

1 个答案:

答案 0 :(得分:0)

将这些权限解耦为单独的授权管理器类是很好的第一步。在该代码中,您可以对您的权限规则进行硬编码(例如“Admin”角色可以执行操作X,Y和Z,但只有“Manager”角色可以执行X或Y)。但您也可以让授权管理器中的代码执行动态查找,以检查已在数据库中设置的权限(例如)。

在代码中执行此操作的另一个好处是,您可以对所有内容进行单元测试,以证明您的权限逻辑已正确实现(因此将在运行时正确实施)。如果您的权限经常更改,这将非常有用。

此外,如果您需要经常重新部署(因为频繁更改),解耦将有所帮助,因为代码可以隔离到自己的程序集中。

相关问题