Azure AD 基于资源的授权?

Resource based authorization with Azure AD?

这是场景,我有一个包含很多记录的服务。我的服务也有很多用户,每个用户都可以创建、读取、更新和删除记录。必须在记录级别控制对每条记录执行这些操作的能力。

例如,用户A只能读取和更新记录1,用户B可以读取、更新和删除记录1、2、3,用户C可以对所有记录进行所有操作。

如何使用 Azure AD 完成此操作?

显然,使用应用程序角色是不够的,因为它赋予了用户对所有记录的统一访问权限。

租户也没有用,因为它对所有用户都是相同的(在本例中)。

我绝对不想为每条记录单独定义访问权限,我想做一些事情,比如将角色分配给用户组,然后以某种方式将记录分配给该组。

是否有处理此类基于资源的授权的标准方法?

正如您正确提到的那样,基于角色的访问或授权非常通用,使用它,具有特定角色的用户可以访问(或被拒绝访问)所有资源。 (如果您的场景允许,您可以通过将资源分为几种类型并将 1 种或多种资源的访问权授予 1 种或多种角色来使其变得更好)。

当尝试单独控制每条记录的访问权限时,您将需要为基于资源的授权实施自定义逻辑。通常,应用程序根据其需求混合使用基于角色和基于资源的授权。

最后它会归结为您需要在 3 个事物之间维护的映射

  • 资源(或资源集合)
  • Azure AD 对象(如角色、组、被授予权限的个人用户)
  • 您授予的权限(由您的应用程序理解和强制执行,例如 Blogs.Create 对博客应用程序的权限)

Microsoft Docs 上的相关文档

Role-based and resource-based authorization

本文档讨论了类似的概念,并展示了一个很好的示例,该示例同时使用了基于角色和基于资源的方法。基于角色对资源进行 CRUD 操作,然后对该资源的所有者(即基于资源)的特定资源的特殊权限

代码示例

  1. Multi-tenant Survey Application Code

    上面 link 文档的代码库

  2. Authorization in a web app using Azure AD groups & group claims

    这提供了一个示例任务跟踪器应用程序,用户可以在其中与其他用户或 Azure AD 组共享任务。您将再次看到示例数据库中正在维护资源(即本例中的任务)和 Azure AD 对象(即用户或组)之间的映射。

正在为组分配应用程序角色

既然你在问题中提到了这一点,那么只是让你知道这可以通过 Azure 门户实现,但前提是你拥有 Azure AD Premium 许可证(我不确定具体哪些支持它,但搜索基于小组的作业功能,您会发现它。)