【问题标题】:ASP.Net WebApi Authorization using resource data使用资源数据的 ASP.Net WebApi 授权
【发布时间】:2013-09-18 20:09:02
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: asp.net security asp.net-web-api authorization actionfilterattribute


    【解决方案1】:

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

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

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

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

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

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

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

    我希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 2014-09-12
      • 2017-07-04
      • 2020-07-30
      • 1970-01-01
      • 2014-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多