了解 Microsoft Graph 权限和许可

已完成

若要开发检索 Microsoft 365 数据的客户应用程序,需要了解 Microsoft Graph 中权限和许可的工作原理。 你需要对应用程序可以访问和无法访问的数据做出正确的选择。 例如,如果要显示已登录销售人员即将举行的会议,则需要应用程序有权从 Microsoft 365 访问其日历数据。

应用程序请求通过 Microsoft Graph 访问特定 Microsoft 365 资源的权限。 这些请求可以预先生成(注册应用程序时)或动态生成(在应用程序运行时)。 当应用程序请求权限时,用户或管理员必须同意权限,然后 Microsoft Graph 才能授权请求。

应用程序何时需要与 Microsoft Graph 交互,有三个主要概念需要了解:

  • Microsoft Graph 权限或范围
  • 权限类型
  • 访问令牌

Microsoft Graph 权限或范围

Microsoft Graph 权限范围包括控制应用对特定资源(如用户、邮件和文件)的访问权限。 还包括控制可以对这些资源执行的操作。 以下示例模式定义了 Microsoft Graph 对资源的操作权限:

Resource-name.operation.constraint

例如,User.Read.All 授予应用程序读取目录中所有用户的配置文件的权限。 若要读取已登录用户的配置文件,需要 User.Read 权限。

权限类型

Microsoft Entra ID 中有两种类型的权限:

  • 应用程序在代表用户进行 Microsoft Graph 调用时使用委派权限。 用户可以同意某些权限范围,如 User.Read。 但某些权限范围特权较高,需要管理员同意。 权限范围特权较高的示例:Channel.Delete.All,表示代表已登录用户删除任何团队中的频道。

    委派权限范围的最简单示例:User.Read,是调用 /me 终结点所必需的。 在 Microsoft Graph 中,具有 /me 的所有 API 调用都使用当前登录用户的上下文。

  • 应用程序权限不需要应用程序中的登录用户。 它通常在用户不在时使用,例如在后台进程中或要提升权限时使用。 管理员提前同意该权限。

    应用程序权限范围的示例:Calendars.ReadWrite,它允许应用在没有登录用户的情况下创建、读取、更新和删除所有日历的事件。 无法将 /me API 用于应用程序权限范围,因为没有登录用户可提取该信息。

访问令牌

在应用程序请求权限且用户或管理员同意后,应用程序可以从 Microsoft 标识平台获取访问令牌。 你可以将访问令牌视为向工作人员提供的电影票,证明你已支付观看影片的费用。 应用程序向 Microsoft Graph 提供访问令牌,证明其有权访问 Microsoft 365 数据。

Microsoft Graph 要求每个请求的 HTTP 标头中都有一个有效的访问令牌。 它将传入每个 HTTP 请求的授权标头,其前面有一个单词“Bearer”和一个空格。 这与电影票一样,说明持有者可以使用访问令牌。 也就是说,任何人只要有票都可以进入,而无需证明身份。 因此,Microsoft Graph 要求对所有请求进行 HTTPS 加密。 与电影票一样,访问令牌仅在短时间内有效,通常为一小时。

下面是授权标头在 Microsoft Graph 请求中的外观示例:

GET https://graph.microsoft.com/v1.0/me/ HTTP/1.1
Host: graph.microsoft.com
Authorization: Bearer EwAoA8l6BAAU ... 7PqHGsykYj7A0XqHCjbKKgWSkcAg==