【问题标题】:ASP.Net WebApi Authorization using resource data使用资源数据的 ASP.Net WebApi 授权
【发布时间】:2013-09-18 20:09:02
【问题描述】:
在 WebApi 中,我将如何以及在何处插入基于资源元数据和审计信息的授权规则。
这是我目前在请求管道中使用的所有拦截器
- IHttpModule
- 委派处理程序
- 授权过滤器
- 动作过滤器
背景 - 我的 DELETE 请求授权规则基于现有资源的审核信息。例如,用户只能删除他创建的资源。因此,如果删除资源的请求来自尚未创建资源的用户(具有删除权限),我应该返回 403 错误。
我不知道如何从我已经使用的 4 个处理程序中的任何一个访问模型和存储库。想知道什么是正确的方法。
【问题讨论】:
标签:
asp.net
security
asp.net-web-api
authorization
actionfilterattribute
【解决方案1】:
您的授权规则是用什么写的?这就是你想要达到的目标吗?我通常推荐的模式是使用 XACML(可扩展访问控制标记语言)。它类似于 SAML,但用于细粒度授权。
使用 XACML,您可以获得一个策略决策点(PDP - 授权引擎/服务),用于评估您的授权规则。 PDP 公开一个是/否授权 API。然后您需要做的就是将您的拦截器连接到该 PDP。拦截器将创建正确的授权请求并将请求发送到 PDP。
这意味着您在您提到的所有 4 个过滤器中都应用了相同的授权逻辑:
- IHttpModule
- 委派处理程序
- 授权过滤器
- 动作过滤器
XACML 是一个 OASIS 标准,就像 SAML 一样。您可以查看他们的homepage。我是该标准的编辑之一,并且 - 免责声明 - 我为其中一个供应商工作,Axiomatics。
XACML 还为您提供了细粒度的授权语言。例如,您可以实现以下类型的规则:
- 当且仅当 document.location==user.location 时,具有角色==manager 的用户可以对 type==documents 的资源执行操作==edit
我希望这会有所帮助。