权限范围 | Graph API 概念

**适用范围: ** Graph API | Azure Active Directory

Graph API 公开了 OAuth 2.0 权限范围,此范围用于控制应用对客户目录数据的访问权限。 作为开发人员,可以将应用的权限范围配置为其要求的适当访问权限。 通常,可以通过 Azure 门户执行此操作。 登录期间,用户或管理员有机会同意允许应用使用配置的权限范围访问其目录数据。 因此,应选择具有应用所需的最低权限级别的权限范围。 有关如何配置应用的权限以及同意过程的详细信息,请参阅 Integrating Applications with Azure Active Directory(将应用程序与 Azure Active Directory 集成)

重要

强烈建议使用 Microsoft Graph 代替 Azure AD Graph API 来访问 Azure Active Directory 资源。现在我们的开发工作将重点集中在 Microsoft Graph 上,没有计划对 Azure AD Graph API 进行进一步的改进。Azure AD Graph API 仍适用的方案数量非常有限;有关详细信息,请参阅 Office 开发人员中心中的博客文章 Microsoft Graph 或 Azure AD Graph

权限范围概念

仅应用与委托的范围

权限范围可以是仅应用或委托的范围。 仅应用范围(也称为应用角色)可以授予应用由该范围提供的全部特权。 如果没有已登录用户,则作为服务运行的应用通常会使用仅应用范围。 委托的权限范围适用于用户登录的应用。 这些范围可以向应用委托已登录用户特权,允许应用充当已登录用户的角色。 应用获得的实际特权至少应为通过该范围授予的特权和已登录用户拥有的特权的特权组合(交叉部分)。 例如,如果权限范围授予写入所有目录对象的委托特权,但已登录用户只有更新其自身用户配置文件的特权,则该应用将只能写入已登录用户配置文件,而不能写入任何其他对象。

用户和组的完整和基本配置文件

用户的完整配置文件包括该实体已声明的所有属性。 由于配置文件可能包含敏感的目录信息或个人身份信息 (PII),因此,有好几个范围都限制了应用对一组有限属性(称为基本配置文件)的访问。 对用户而言,基本配置文件仅包括以下属性: 显示名称、名字和姓氏、照片和电子邮件地址。 对组而言,基本配置文件仅包含显示名称。

权限范围详细信息

下表列出了 Graph API 权限范围,并介绍了每个范围授予的访问权限。

  • “范围”列列出了范围名称。 范围名称采取 resource.operation.constraint 的形式;例如,Group.ReadWrite.All。 如果约束是“All”,则范围允许应用在目录中所有指定的资源(组)上执行操作 (ReadWrite);否则,范围将仅允许在已登录用户的配置文件上执行操作。 范围可以授予指定操作的有限特权,有关详细信息,请参见“说明”列。
  • “权限”列显示了 Azure 门户中范围的显示方式。
  • “说明”列描述了范围授予的全部特权。 对于委托范围,应用获得的实际应用获得的实际特权至少应为通过该范围授予的访问权限和已登录用户的特权的特权组合(交叉部分)。
范围 权限 说明 范围类型 需要管理员同意
用户读取 启用登录并读取用户配置文件 允许用户登录到应用并允许应用读取已登录用户的完整配置文件。 完整的配置文件包括用户实体已声明的所有属性。 应用无法读取导航属性,如管理器或直接下属。 此外,还允许应用读取已登录用户的以下基本公司信息(通过 TenantDetail 对象): 租户 ID、租户显示名称和已验证的域。 委托
User.ReadBasic.All 读取所有用户的基本配置文件 允许应用读取代表已登录用户的组织中的所有用户的基本配置文件。 以下属性组成了用户的基本配置文件: 显示名称、名字和姓氏、照片和电子邮件地址。 若要读取用户所在的组,该应用将还需要 Group.Read.All 或 Group.ReadWrite.All。 委托
User.Read.All 读取所有用户的完整配置文件 与 User.ReadBasic.All 一样,但除了前者允许应用读取组织中所有用户的完整配置文件以及读取比如管理器和直接下属等导航属性时。 完整的配置文件包括用户实体已声明的所有属性。 若要读取用户所在的组,该应用还将需要 Group.Read.All 或 Group.ReadWrite.All。 委托
Group.Read.All 读取所有用组(预览) 允许应用读取代表已登录用户的组织中的所有组的基本配置文件。 该应用还可以读取某组是其成员的组的基本配置文件。 组的基本配置文件仅包括组的显示名称。 若要读取组成员的配置文件信息,该应用还需要 User.ReadBasic 或 User.Read.All。 委托
Group.ReadWrite.All 读取和写入所有组(预览) 允许应用读取组织中所有组的完整配置文件,并且代表已登录用户创建和更新用户组。 该应用还可以读取某组是其成员的组的完整配置文件。 完整配置文件包括实体已声明的所有属性。 若要读取组的成员的配置文件或更新组成员,该应用还需要 User.ReadBasic 或 User.Read.All。 委托
Device.ReadWrite.All 读取和写入所有设备 允许应用不需要已登录用户就可以读取和写入全部设备属性。 不允许创建设备、删除设备以及更新设备备用安全标识符。 仅应用
Directory.Read.All 读取目录数据 允许应用读取组织目录中的所有数据,如用户、组、应用以及其关联的导航属性。 注意: 如果在用户自己的组织租户内注册应用程序,则用户可以同意需要此权限的应用程序。 仅限应用、委托
Directory.ReadWrite.All 读取和写入目录数据 允许应用读取组织目录中的所有数据。 允许应用创建和更新用户和组,以及更新导航属性,但禁止删除用户或组。 还允许应用在应用程序上定义架构扩展。 有关特权的详细列表,请参见下面的 Directory.ReadWrite.All 特权明细 仅限应用、委托
Directory.AccessAsUser.All 已登录用户身份访问目录 允许应用具有与已登录用户相同的访问组织目录中的数据的权限。 注意: 本机客户端应用可以使用户同意此权限,但 Web 应用需要管理员同意。 委托

注意: 默认情况下,使用 Azure 门户创建应用时,Azure AD 会为其分配 User.Read 委托的权限范围。

Directory.ReadWrite.All 特权明细

Directory.ReadWrite.All 权限范围授予以下特权:

  • 完整读取所有目录对象(已声明的属性和导航属性)
  • 创建和更新用户
  • 禁用和启用用户(但不是公司管理员)
  • 设置用户备用安全 ID(但不是管理员)
  • 创建和更新组
  • 管理组成员身份
  • 更新组所有者
  • 管理许可证分配
  • 在应用程序上定义架构扩展
  • 注意: 无权重置用户密码
  • 注意: 无权删除实体(包括用户或组)
  • 注意: 特意排除创建或更新上面未列出的实体。 这些实体包括: Application、Oauth2PermissionGrant、AppRoleAssignment、Device、ServicePrincipal、TenantDetail、domains 等。

权限范围方案

下表显示了应用能够执行特殊操作所需的权限范围。 请注意,在某些情况下,应用执行某些操作的能力将取决于权限范围是仅限应用还是委托,如果是委托的权限范围,则取决于已登录用户的特权。

方案 需要访问权限 需要权限范围
登录并显示带用户名称和缩略图照片的磁贴。 读取已登录用户的完整配置文件。
读取公司基本信息
User.Read
基本的人员选取器。 读取代表已登录用户的所有用户的基本配置文件。 User.ReadBasic.All
具有完整配置文件的人员选取器。 同上,但有权访问代表已登录用户的用户的完整配置文件。 User.Read.All
组织图表导航器。 读取代表已登录用户的所有用户、其管理器和直接下属的完整配置文件。 User.Read.All
包括应用权限控制的人员选取器。

组和成员身份查看器。
读取代表已登录用户的所有组和用户的基本配置文件。
读取用户管理器和直接下属的基本配置文件。
读取用户的组成员身份的基本配置文件。
读取组的组成员身份的基本配置文件。
读取组成员的基本配置文件。
User.ReadBasic.All 和 Group.Read.All
显示已登录用户和用户管理器、直接下属和组成员身份的配置文件。 使用 me 操作进行读取:
已登录用户的完整配置文件。
已登录用户的管理器和直接下属的完整配置文件。
已登录用户所在的组的基本配置文件。

注意: 两个范围的组合要比此处所述的 me 操作授予的访问权限多。
User.Read.All 和 Group.Read.All
允许用户创建和管理组的组管理服务。 读取代表已登录用户的所有组和用户的完整配置文件。
读取用户管理器和直接下属的完整配置文件。
读取用户的组成员身份的完整配置文件。
读取组的组成员身份的完整配置文件。
读取组成员的完整配置文件。
创建和更新组及其导航属性(成员)。
User.Read.All 和 Group.ReadWrite.All
读取所有目录对象(包括导航属性)。 Directory.Read.All
读取所有目录对象(包括导航属性)。
创建和更新用户和组对象。
不允许删除用户或组。

注意: 这里只列出了部分已授予特权。
Directory.ReadWrite.All
充当已登录用户角色。 读取和写入代表已登录用户的目录对象(包括导航属性)。 Directory.AccessAsUser.All

管理员、用户和来宾用户的默认访问权限

下表列出了(全局)管理员、用户和来宾在目录中的默认访问权限。 默认访问权限可能会根据该目录的配置设置和/或用户在一个或多个目录角色中的成员身份进一步补充或限制。 有关配置用户和来宾用户对目录数据的访问权限的详细信息,请参阅 Assigning administrator roles in Azure AD(在 Azure AD 中创建或编辑用户)。 有关与各种目录角色关联的访问权限的详细信息,请参阅 Assigning administrator roles in Azure AD(在 Azure AD 中分配管理员角色)

用户类型 访问
全局管理员 读取所有目录对象。
创建、更新和删除所有目录对象
User 读取所有目录对象。
创建应用程序和关联的服务主体。
更新其配置文件。
更新其所拥有的组(和成员属性)。
更新其所拥有的应用程序和服务主体。
删除其所拥有的应用程序和服务主体。
来宾用户 读取其完整配置文件。
读取所有其他用户的基本配置文件。
读取所有组的基本配置文件。
读取应用程序。
更新其配置文件的某些属性。
无用户或组搜索(请参见如下的来宾用户的用户和组搜索限制)。

来宾用户的用户和组搜索限制

用户和组搜索功能使应用能够通过在自定义目录中执行针对用户资源集的查询搜索任何用户或组(例如,https://graph.windows.net/myorganization/users?api-version=1.6)。 管理员和用户都具有这个功能。 但来宾用户不具有此功能。 如果已登录用户是来宾用户,根据权限范围,应用可以通过使用用户的对象 ID 或用户主体名称 (UPN) 或组的对象 ID 来读取特殊用户或组的配置文件(例如,https://graph.windows.net/myorganization/users/241f22af-f634-44c0-9a15-c8cd2cea5531?api-version=1.6);但是它不能针对可能请求多个实体的用户资源集执行查询。 例如,根据权限范围,应用可以通过按照以下导航属性中的链接来读取其包含的用户和组的配置文件,但不能发出查询以返回目录中的所有用户或组。

其他资源