在这种情况下,我有一个包含许多记录的服务。我的服务也有许多用户,每个用户都有创建,读取,更新和删除记录的能力。必须在记录级别上控制对每条记录执行这些操作的能力。
例如,用户A只能读取和更新记录1,而用户B可以读取,更新和删除记录1、2和3,而用户C可以对所有记录执行所有操作。
如何使用Azure AD做到这一点?
显然,仅使用应用程序角色是不够的,因为这赋予了用户对所有记录的统一访问权限。
租户也没有用,因为它对所有用户都是相同的(在此示例中)。
我绝对不想为每个记录单独定义访问权限,我想做一些事情,例如将角色分配给用户组,然后以某种方式将记录分配给组。
是否存在处理这种基于资源的授权的标准方法?
答案 0 :(得分:2)
正如您正确提到的那样,基于角色的访问或授权是非常通用的,使用它,具有特定角色的用户可以访问(或拒绝访问)所有资源。 (如果您的sceanrio允许,您可以将资源分成几种类型,并将一种或多种类型的资源的访问权限分配给1个或多个角色,从而使它更好一点。)
当尝试分别控制每个记录的访问时,您将需要实现基于资源的授权的自定义逻辑。通常,应用程序会根据其需求来混合使用基于角色的授权和基于资源的授权。
最后,它会归结为您需要在三件事之间维护的映射
Blogs.Create
对Blogs应用程序的权限)Microsoft文档上的相关文档
Role-based and resource-based authorization
该文档讨论了类似的概念,并显示了一个很好的示例,该示例同时使用了基于角色和基于资源的方法。根据角色对资源进行CRUD操作,然后对该资源的所有者(即基于资源)对特定资源进行特殊特权
代码示例
Multi-tenant Survey Application Code
上面的文档链接的代码库
Authorization in a web app using Azure AD groups & group claims
此程序提供了一个示例任务跟踪器应用程序,用户可以在其中与其他用户或Azure AD组共享任务。再次,您将看到示例数据库中维护了资源(在这种情况下为任务)与Azure AD对象(即用户或组)之间的映射。
为组分配应用程序角色
由于您在问题中提到了此问题,因此仅让您知道可以从Azure门户进行此操作,但前提是您拥有Azure AD Premium许可证(我不确定哪些特定的许可证支持该许可证,但可以基于组进行搜索分配功能,您会找到它的。)