我正在设计一个新的ASP.Net CORE 2.1 WebAPI,我试图找出实现适合我们需求的授权系统的最佳方法。我们的角色和权限是数据库驱动的,可以混合和匹配基于角色的权限和单个资源权限。因此,对于给定的端点,默认访问权限可能是基于角色的(例如,仅针对Admin),但是管理员也可以为单个用户分配对该端点的访问权限(或相反的权限;并撤消对该角色否则授予的特定资源的访问权限)。结果,每个端点授权都需要一个数据库查询来确定对该资源的有效访问。在我看来,这里需要自定义授权过滤器,但是许多MS文档和其他资源会推送基于策略的身份验证,并建议您不要“自己滚动”。我看不到基于策略的解决方案在这里如何工作,因为它基于静态策略声明。可以通过政策满足我们的需求吗?或者是使用自定义身份验证过滤器的方式?
答案 0 :(得分:0)
策略身份验证是必经之路。是的,它可能基于某种“静态”策略,即,多个操作/控制器最终可能会使用类似[Authorize(Policy = "MyPolicy")]
的名称,但是策略本身不是静态的。您可以在策略处理程序中定义任意数量的条件。您也可以混合搭配。因此,如果说某事仅适用于“ Foo”角色,但您还需要“ Bar”策略定义的对象级别权限,则您肯定会做类似[Authorize(Roles = "Foo", Policy = "Bar")]
的事情。