身份验证和授权基础知识

Microsoft Graph 是受保护的 API 网关,用于访问 Microsoft Entra ID 和 Microsoft 365 等Microsoft云服务中的数据。 它受Microsoft 标识平台保护,该Microsoft 标识平台授权并验证应用是否有权调用 Microsoft Graph。

本文概述了授权应用通过任何Microsoft图形 API访问数据的要求。 如果已经熟悉身份验证和授权的工作原理,请浏览Microsoft 标识平台代码示例Microsoft Graph 教程,了解使用不同Microsoft Graph SDK 构建并调用Microsoft Graph API 的应用。

注册应用程序

在授权应用调用任何Microsoft图形 API之前,Microsoft 标识平台必须首先意识到这一点。 此过程不涉及将应用程序代码上传到平台。 相反,它涉及在Microsoft Entra 管理中心中注册应用,以建立其配置信息,包括以下核心参数:

  • 应用程序 ID:Microsoft 标识平台分配的唯一标识符。
  • 重定向 URI/URL:应用从Microsoft 标识平台接收响应的一个或多个终结点。 Microsoft 标识平台将 URI 分配给本机应用和移动应用。
  • 凭据:可以是客户端机密 (字符串或密码) 、证书或联合标识凭据。 应用使用该凭据向 Microsoft 标识平台进行身份验证。 仅机密客户端应用程序需要此属性;本机、移动和单页应用程序等公共客户端不需要它。 有关详细信息,请参阅 公共客户端和机密客户端应用程序

然后,将此信息添加回代码一次,每次应用都需要在身份验证过程中证明其身份,然后应用才有权访问你的数据。

有关详细信息,请参阅使用 Microsoft 标识平台注册应用程序

访问方案

应用可以通过以下两种方式之一访问数据,如下图所示。

  • 委托访问,代表已登录用户的应用。
  • 仅限应用的访问权限,即使用自己的标识执行操作的应用。

Microsoft 标识平台中的委派访问方案和仅限应用访问方案的插图。

代表用户) 委派访问 (访问

在此访问方案中,用户登录到代表其调用 Microsoft Graph 的客户端应用程序。 客户端应用和用户都必须获得发出请求的授权

若要授权客户端应用代表已登录用户访问数据,它必须具有所需的权限,该权限通过以下两个因素的组合获得:

  • 委托的权限,也称为 范围:Microsoft Graph 公开的权限,表示应用可以代表已登录用户执行的操作。 可以允许应用代表一个用户执行操作,但不能代表另一个用户。
  • 用户权限:已登录用户对资源拥有的权限。 用户可能是资源的所有者,资源可能与他们共享,也可以通过基于角色的访问控制系统 (RBAC) (如 Microsoft Entra RBAC)向其分配权限。

示例方案:Microsoft Graph 中的委派访问权限

终结点https://graph.microsoft.com/v1.0/me是登录用户信息的访问点,该信息表示受Microsoft 标识平台保护的资源。 对于委派访问,满足以下两个因素:

  • 必须代表已登录用户向应用授予受支持的Microsoft Graph 委派权限,例如 User.Read 委托权限。
  • 此方案中的已登录用户是数据的所有者。

注意

具有别名的 /me 终结点和 API 仅适用于已登录用户,因此在委派访问方案中调用。

作为Microsoft Graph 委托权限的替代方法,还可以通过基于角色的访问控制系统(如 Microsoft Entra RBAC)为应用分配权限。

仅应用访问 (在没有用户) 的情况下访问

在此访问方案中,应用程序可以自行与数据交互,而无需登录用户。 仅应用 访问用于自动化和备份等方案,并且主要由作为后台服务或守护程序运行的应用使用。 当不希望有用户登录,或者所需数据的范围不能限定为单个用户时,它适用。

若要授权客户端应用使用自己的标识访问数据,它必须具有所需的权限,它通过以下方式之一接收该权限:

  • 应用Microsoft Graph 应用程序权限(也称为应用角色)分配支持
  • 为应用分配了要管理的资源的所有权

注意

作为Microsoft Graph 应用程序权限的替代方法,还可以通过基于角色的访问控制系统(如 Microsoft Entra RBAC)为应用分配权限。

示例方案:Microsoft Graph 中的仅应用访问

终结点 https://graph.microsoft.com/v1.0/users/delta 允许轮询对用户数据的更改。 在仅限应用的访问权限中,必须向应用授予受支持的权限,例如 User.Read.All Microsoft Graph 应用程序权限,才能成功查询和接收用户数据更改。

Microsoft Graph 权限

如前所述,无论访问方案如何,应用都必须有权访问其要访问的数据。

Microsoft Graph 公开精细权限 ,用于控制对Microsoft Graph 资源(如用户、组和邮件)的访问。 两种类型的权限可用于受支持的 访问方案

  • 委托的权限:也称为 范围,允许应用程序代表已登录用户进行操作。
  • 应用程序权限:也称为 应用角色,允许应用在没有登录用户的情况下自行访问数据。

作为开发人员,你可以根据访问方案和要执行的操作来决定为应用请求哪些Microsoft Graph 权限。 当用户登录到应用时,应用必须指定需要包含在访问令牌中的权限。 这些权限:

  • 可由管理员对应用程序进行预授权。
  • 可以直接由用户同意。
  • 如果未进行预授权,可能需要管理员权限才能授予同意。 例如,对于具有较大潜在安全影响的权限。

有关权限和同意的详细信息,请参阅 权限和同意简介

有关Microsoft Graph 权限及其使用方法的详细信息,请参阅 Microsoft Graph 权限概述

注意

作为最佳实践,请求你的应用所需的最低特权权限,以便访问数据并正常工作。 请求超过必要特权的权限是不良的安全行为,可能会导致用户不同意,并影响你的应用的使用。

访问令牌

若要访问受保护的资源,应用程序必须通过提交有效的访问令牌来证明它有权访问该资源。 应用程序在向 Microsoft 标识平台发出身份验证请求时获取此访问令牌,Microsoft 标识平台后者又使用该访问令牌来验证应用是否有权调用 Microsoft Graph。

Microsoft 标识平台颁发的访问令牌包含声明,这些声明是有关应用程序的详细信息,在委派访问方案中,是登录用户。 受 Microsoft 标识平台保护的 Microsoft Graph 等 Web API 使用声明来验证调用方并确保调用方有权执行其请求的操作。 对于委托访问方案,调用用户和应用的权限都是声明的一部分。 对于应用程序方案,应用的权限是声明的一部分。 有关构成访问令牌的部分的详细信息,请参阅 访问令牌声明参考

若要调用 Microsoft Graph,应用通过将访问令牌作为 持有者 令牌附加到 HTTP 请求中的 Authorization 标头来发出 授权 请求。 例如,下述调用会返回已登录用户的个人资料信息(已缩短访问令牌以便于阅读):

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

若要详细了解Microsoft 标识平台访问令牌,请参阅Microsoft 标识平台中的 ID 令牌

获取访问令牌

建议使用身份验证库来管理与Microsoft 标识平台的令牌交互。 身份验证库提取了许多协议详细信息,例如验证、Cookie 处理、令牌缓存和维护安全连接,使你能够将开发重点放在应用的功能上。 Microsoft发布开源客户端库和服务器中间件。

对于 Microsoft 标识平台终结点:

  • Microsoft身份验证库 (MSAL) 客户端库可用于各种框架,包括 .NET、JavaScript、Android 和 iOS。 所有平台都处于生产支持的预览版中,在引入中断性变更的情况下,Microsoft保证升级路径。
  • Microsoft 中的服务器中间件可用于 .NET core 和 ASP.NET (OWIN OpenID Connect 和 OAuth) 以及 Node.js (Microsoft 标识平台 Passport.js) 。
  • Microsoft 标识平台还与许多第三方身份验证库兼容。

有关Microsoft客户端库、Microsoft服务器中间件和兼容的第三方库的完整列表,请参阅Microsoft 标识平台文档

或者,可以直接使用 Microsoft 标识平台 终结点,而无需身份验证库的帮助。 有关详细信息,请参阅以下文章: