在 WebApi 中,我将如何以及在何处插入基于资源元数据和审计信息的授权规则。
这是我目前在请求管道中使用的所有拦截器
- IHttpModule
- 委托处理程序
- 授权过滤器
- 动作过滤器
背景 - 我围绕 DELETE 请求的授权规则基于现有资源的审核信息。例如,用户只能删除自己创建的资源。因此,如果删除资源的请求来自尚未创建资源的用户(具有删除权限),我应该返回 403 错误。
我不知道从我已经使用的 4 个处理程序中的任何一个访问模型和存储库的方法。想知道什么是正确的方法。
在 WebApi 中,我将如何以及在何处插入基于资源元数据和审计信息的授权规则。
这是我目前在请求管道中使用的所有拦截器
背景 - 我围绕 DELETE 请求的授权规则基于现有资源的审核信息。例如,用户只能删除自己创建的资源。因此,如果删除资源的请求来自尚未创建资源的用户(具有删除权限),我应该返回 403 错误。
我不知道从我已经使用的 4 个处理程序中的任何一个访问模型和存储库的方法。想知道什么是正确的方法。
你的授权规则是用什么写的?这就是你想要达到的目标吗?我通常推荐的模式是使用 XACML(可扩展访问控制标记语言)。它类似于 SAML,但用于细粒度授权。
使用 XACML,您可以获得评估您的授权规则的策略决策点(PDP - 授权引擎/服务)。PDP 公开一个是/否授权 API。然后您需要做的就是将您的拦截器连接到该 PDP。拦截器将创建正确的授权请求并将请求发送到 PDP。
这意味着您在您提到的所有 4 个过滤器中应用了相同的授权逻辑:
XACML 是一个 OASIS 标准,就像 SAML 一样。你可以看看他们的主页。我是该标准的编辑之一,并且 - 免责声明 - 我为供应商之一Axiomatics工作。
XACML 还为您提供了细粒度的授权语言。例如,您可以实现以下类型的规则:
我希望这有帮助。