自定义授权过滤器与 ASP.Net 核心 2.1 中的策略



我正在设计一个新的 ASP.Net CORE 2.1 WebAPI,我正在尝试找出实现适合我们需求的授权系统的最佳方法。 我们的角色和权限由数据库驱动,可以混合和匹配基于角色的资源权限和个人资源权限。 因此,对于给定的终结点,默认访问权限可能基于角色(例如仅限管理员(,但管理员也可以为单个用户分配对该终结点的访问权限(或相反;并撤销对角色授予的特定资源的访问权限(。 因此,每个终端节点授权都需要数据库查询来确定对该资源的有效访问权限。 在我看来,这里需要一个自定义授权过滤器,但许多 MS 文档和其他资源都推动基于策略的身份验证,并建议不要"自己滚动"。 我不明白基于策略的解决方案在这里如何工作,因为它基于静态策略声明。 我们的需求能否通过策略来满足,还是自定义身份验证筛选器是要走的路?

策略身份验证是要走的路。是的,它可能基于某种"静态"策略,即多个操作/控制器最终可能会使用类似[Authorize(Policy = "MyPolicy")],但策略本身不是静态的。您可以在策略处理程序中定义任意数量的条件。您也可以混合搭配。因此,如果说某些内容仅适用于"Foo"角色,但您还需要由"Bar"策略定义的对象级权限,那么您肯定会执行类似[Authorize(Roles = "Foo", Policy = "Bar")]的操作。

最新更新