基于权限而不是基于角色

时间:2016-07-13 18:20:27

标签: azure-active-directory

在我的应用程序中,为用户分配了多个角色,并为角色分配(授予)多个权限。 所以在我的代码中,我从不检查角色,但总是反对细粒度的权限。

这里描述了为什么我认为基于权限的访问优于基于角色的访问: https://softwareengineering.stackexchange.com/a/299732

在Azure AD中,我可以为用户分配角色。 但我认为无法创建权限并将它们与角色相关联,所以我猜这部分必须保留在我的应用中?

那么我应该如何将Azure应用程序角色链接到我的应用程序的权限?

我的假设是我需要构建一个用于执行此操作的UI,使用Graph API检索Azure中为应用程序定义的角色列表。 如果是这种情况,那么我在Azure中使用内置角色功能并没有看到很多好处,而是将角色定义保留在我的应用程序中......

我错过了什么吗?

2 个答案:

答案 0 :(得分:3)

使用Azure AD声明的关键是将用户信息保存在Active Directory中而不是应用程序中。

在这种情况下,您需要创建映射到应用程序中角色的权限。 然后,这些角色可以映射到Azure AD AppRoles或Groups。

我建议你不要直接将用户映射到角色。 如果您处理群组,则无需在应用程序中添加/删除用户:角色和权限是从用户所属的群组继承的。

  1. 直接映射到论坛

    目前,这将是我的首选方案。用户被分配到组,您的海关角色将映射到这些组。 创建新用户时,只需将其添加到某些组中,并且应用程序中不需要执行任何操作(删除用户时也是如此)。 如果您不害怕预览(并且拥有Azure AD Premium许可证),Azure广告提供了dynamically assign users to group的方法。

  2. 请记住,目前nested group memberships aren't currently supported。 因此,如果A组在B组中,而B组在您的应用程序中具有某些权限,则A组中的用户将不具有从B组继承的权限。

    1. 将组映射到应用程序角色

      此选项似乎是一种矫枉过正,因为它需要一个步骤:将Azure广告组映射到Azure应用程序角色并将这些角色映射到您的自定义角色。 您需要使用AAD Graph API实现所有这些逻辑,并且您的UI将更加复杂。

    2. 在您的方案中使用此选项的唯一理由是,如果您有一个包含大量组和应用程序的大型目录:如果用户超过200个组,则Azure AD返回的Jwt标记将不包含组和您将不得不再次查询Azure AD以获取用户组(see)。 在这种情况下,将组映射到应用程序角色是有意义的,因为当用户对应用程序进行身份验证时,Azure Ad将始终为您提供用户的角色(或用户所属组的角色)

      你可以在这里找到有趣的代码示例:

答案 1 :(得分:0)

目前,Azure Active Directory应用程序角色主要用于每个用户只能拥有一个角色并且这个角色映射到简单授权模型的场景。

虽然技术上可以支持每个用户的多个角色,但只能通过Graph API进行管理,并且需要您为用户管理员/用户构建用户界面来管理。

正如您所指出的,您的方案比这更复杂,每个用户有多个角色,有多个(可能是可自定义和重叠的)权限集。

鉴于这两点,您自己实施所有授权的方法是合理的。

查看本文,其中更详细地概述了Azure AD最适合的授权方案:

https://azure.microsoft.com/en-us/documentation/articles/guidance-multitenant-identity-app-roles/