基于数据过滤而非请求授权的访问控制

时间:2016-11-14 07:24:30

标签: rest language-agnostic authorization soa access-control

在多用户服务中控制访问的标准方法是根据需要提供尽可能多的服务方法,其中每种服务方法都具有具体的结果和访问权限。

例如,

  1. Moderator有权调用GetModerationAwaitingPosts服务方法来访问等待审核的任何访问者的帖子

  2. Visitor有权致电GetOwnedPosts服务方法,仅访问自己的帖子,包括等待帖子的草稿和审核

  3. Visitor有权致电GetModeratedPosts服务方式,仅访问所有访问者的审核帖子

  4. 但是可能还有另一种方法 - 单一服务方法GetPosts来请求允许请求者查看的帖子。

    1. 任何已登录的用户都有权调用此方法。

    2. 首先根据来电者的角色过滤帖子。

    3. 然后根据GetPosts方法传递的参数过滤帖子,或在客户端过滤帖子。

    4. 例如,通过查询拦截器在WCF数据服务中使用此方法。

      如何根据在不同体系结构和方法中命名和处理的用户内部服务方法(如SOA,REST,CQRS)来过滤数据?这是一个可靠的解决方案吗?

      是否有任何书籍/文章详细考虑这些方法之间的差异?

      至于我,当发现请求的结果取决于请求者时,我发现它真的很奇怪和不寻常。

1 个答案:

答案 0 :(得分:0)

是的,有一种称为基于属性的访问控制(ABAC,)的访问控制范例,它实现了基于数据的基于上下文的授权,该授权使用有关用户的信息(角色,部门,年龄,位置)。 ..)关于资源(所有者,分类,类型......)动作(查看,编辑,删除)和上下文(时间,IP地址......)

ABAC将允许您实施政策,例如:

  • 医疗用例
    • 医生可以查看他们被分配到的病人的医疗记录
    • 护士可以在同一个部门编辑病人的医学期刊
  • 财务用例
    • 出纳员可以查看其分支机构中客户的帐户
    • 出纳员可以批准转移到他们的批准限额

ABAC提供如下所示的架构。

ABAC Architecture - Axiomatics

在架构中,您可以使用PEP或策略执行点的概念,您可以使用它来保护GUI,API,Web服务,微服务,ESB和数据库中的任何内容。

PEP呼叫作为架构核心的PDP或策略决策点。 PDP使用一组策略来确定是应该授予还是拒绝访问。它还可以使用外部属性源,PIP或策略信息点来帮助确定是否确实应该授予访问权限。

今天有一种语言可以实现ABAC。这种语言称为XACML()。 XACML为您提供:

  • 架构
  • 政策语言
  • 请求/响应方案

使用XACML,您可以创建JSON授权请求,将它们发送到PDP并获取JSON响应。这是一种非常轻量级的回复方式。

这意味着你可以

  • 授予或拒绝访问给定记录,或
  • 过滤用户可以按照您的要求中所述访问的记录