1

在 WebApi 中,我将如何以及在何处插入基于资源元数据和审计信息的授权规则。

这是我目前在请求管道中使用的所有拦截器

  1. IHttpModule
  2. 委托处理程序
  3. 授权过滤器
  4. 动作过滤器

背景 - 我围绕 DELETE 请求的授权规则基于现有资源的审核信息。例如,用户只能删除自己创建的资源。因此,如果删除资源的请求来自尚未创建资源的用户(具有删除权限),我应该返回 403 错误。

我不知道从我已经使用的 4 个处理程序中的任何一个访问模型和存储库的方法。想知道什么是正确的方法。

4

1 回答 1

1

你的授权规则是用什么写的?这就是你想要达到的目标吗?我通常推荐的模式是使用 XACML(可扩展访问控制标记语言)。它类似于 SAML,但用于细粒度授权。

使用 XACML,您可以获得评估您的授权规则的策略决策点(PDP - 授权引擎/服务)。PDP 公开一个是/否授权 API。然后您需要做的就是将您的拦截器连接到该 PDP。拦截器将创建正确的授权请求并将请求发送到 PDP。

这意味着您在您提到的所有 4 个过滤器中应用了相同的授权逻辑:

  1. IHttpModule
  2. 委托处理程序
  3. 授权过滤器
  4. 动作过滤器

XACML 是一个 OASIS 标准,就像 SAML 一样。你可以看看他们的主页。我是该标准的编辑之一,并且 - 免责声明 - 我为供应商之一Axiomatics工作。

XACML 还为您提供了细粒度的授权语言。例如,您可以实现以下类型的规则:

  • 当且仅当 document.location==user.location 时,具有角色==manager 的用户可以对 type==documents 的资源执行操作==edit

我希望这有帮助。

于 2013-09-19T18:22:42.030 回答