了解 SharePoint Online 新式开发上下文中的 Azure Active Directory 和 OAuth 2.0

身份验证和授权在任何开发平台中都起着关键作用。 在 SharePoint Online 新式开发领域,Azure Active Directory (AzureAD) 和开放授权 2.0 (OAuth 2.0) 协议是安全基础结构的关键元素。

事实上,Azure Active Directory 位于每个Microsoft 365 租户的掩护下,在访问本机服务以及自定义开发的应用程序时处理身份验证和授权要求。 OAuth 2.0 是用于授权访问本机工作负载和自定义开发应用程序的行业协议。

重要

本文指的是所谓的 PnP 组件、示例和/或工具,它们是由提供支持的活动社区支持的开源资产。 没有来自 Microsoft 的官方支持渠道的开放源代码工具支持的 SLA。 但是,这些组件或示例使用Microsoft Microsoft支持的现成 API 和功能。

如果愿意,可以watch以下视频,而不是阅读整篇文章,你仍然可以将其视为更详细的参考。

IMAGE_ALT

了解 AzureAD 和 OAuth 2.0 在 SharePoint 框架 中的角色

在 Microsoft Office SharePoint Online 中,开发 SharePoint 框架 (SPFx) 解决方案时,可以使用 Microsoft Graph 以及依赖于 OAuth 2.0 和 Azure Active Directory 的任何其他第三方 API。 具体而言,默认情况下,SharePoint 框架任何外部 API 都可以通过 MSGraphClientAadHttpClient 使用,并利用名为“SharePoint Online 客户端扩展性 Web 应用程序主体”的预定义 Azure Active Directory 应用程序。

注意

有关从SharePoint 框架解决方案中使用 Microsoft Graph 的更多详细信息,请阅读使用 MSGraphClientV3 连接到 Microsoft Graph 一文。 有关从SharePoint 框架使用任何其他第三方 API 的详细信息,请阅读在SharePoint 框架解决方案中连接到 Azure AD 保护的 API 一文。

重要

在某些情况下,需要对目标 API 进行专用且独立的访问。 在这种情况下,可以依赖于SharePoint 框架解决方案的“域隔离”配置。 有关域隔离方案的其他详细信息,请阅读独立 Web 部件一文。

“SharePoint Online 客户端扩展性 Web 应用程序主体”应用程序由Microsoft Office SharePoint Online在任何Microsoft 365 租户中预先注册,并允许所有SharePoint 框架解决方案共享唯一应用程序以访问 Microsoft Graph 和任何其他第三方 API。 在本文中,你将了解 Azure Active Directory 和 OAuth 2.0 在SharePoint 框架上下文中的角色。

了解访问令牌

若要使用在 Azure Active Directory 中注册并受 OAuth 2.0 保护的任何 API,需要提供访问令牌,根据定义,该令牌是用于保护资源的不透明字符串。 对于 Azure Active Directory 以及许多其他特定于供应商的标识平台,访问令牌是 JSON Web 令牌 (JWT) ,其中包含一组声明。 声明是有关访问令牌描述的主题的断言,其中断言保证为 true,因为令牌由颁发者 (Azure Active Directory 在此上下文中进行数字签名,) 令牌的接收者信任颁发者。

注意

有关 Open Authorization 2.0 协议的其他信息,请参阅其规范 OAuth 2.0 Authorization Framework。 还可以找到有关访问令牌的 JWT 令牌格式的其他信息,请阅读 文档 JSON Web 令牌 (JWT) 配置文件的 OAuth 2.0 Acccess 令牌

访问令牌通过 HTTP 授权标头提供给目标 API/服务,具体而言,在 Azure Active Directory 的字段中,它是 持有者类型的授权令牌。

注意

如果想知道“持有者”的含义以及为什么需要在授权标头中的实际访问令牌值之前指定持有者类型,可以阅读规范 OAuth 2.0 授权框架:持有者令牌用法

委托的权限范围与应用程序权限范围

访问令牌描述的main信息之一是授予使用目标 API/服务的权限。

访问令牌中的权限有两种main风格:

  • 委托:是允许使用充当已登录用户的目标 API/服务的令牌。
  • 应用程序:是允许在没有登录用户的情况下使用应用程序标识的目标 API/服务的令牌。 典型方案包括后台任务、守护程序等。

在访问令牌中使用委托的权限时,与令牌关联的权限范围将是已登录用户的权限与使用 API/服务的应用程序权限的交集的结果。 这意味着,即使用户可能具有高级权限 (读取和写入电子邮件(例如) ),如果应用程序在 Azure Active Directory 中注册了低级别权限 (仅对电子邮件(例如) )进行读取,则授予应用程序的权限将是用户和应用程序权限 (即当前示例中) 中电子邮件的只读。

为了使令牌能够颁发并完全有效,对于与当前用户的个人资源相关的权限,必须有明确的用户同意,或者租户管理员的同意,才能获得与租户范围资源相关的权限。

在访问令牌中使用应用程序权限时,授予的权限通常需要租户管理员的同意,因为此类应用程序随后将获取对租户范围的目标资源的访问权限,因此需要管理员批准。

在SharePoint 框架解决方案中,仅获取具有委派权限的访问令牌,这意味着将仅使用 Microsoft Graph 以及充当登录用户的任何其他 API/服务。

了解SharePoint 框架访问令牌和委派的权限范围

为了更好地了解访问令牌的角色和格式,可以使用本文相关SharePoint 框架的示例使用 Microsoft Graph。 在以下屏幕截图中,可以看到示例的用户界面。

有关从 SharePoint 框架 使用 Microsoft Graph 的示例 Web 部件的界面。有一个标头,其中包含当前用户的用户主体名称,以及一个按钮,用于检查Microsoft Graph 访问令牌的内容

示例 Web 部件依赖于 Microsoft 提供的 jwt.ms 网站, 可在其中检查访问令牌的内容。

在 SharePoint 框架 Workbench 中运行示例 Web 部件,然后按“查看 Microsoft Graph 的访问令牌”按钮,将转到 jwt.ms 网站,可在其中查看访问令牌的内容。 在以下屏幕截图中,可以看到示例访问令牌 jwt.ms 网站的输出。

说明示例访问令牌内容(包括令牌中定义的所有声明及其值)的 jwt.ms 网站

在每个 JWT 访问令牌中都有声明,可在此处找到颁发给具有委派权限范围的SharePoint 框架客户端的访问令牌的最重要声明列表:

  • aud:令牌的目标受众,即已为其颁发令牌的 API/服务。
  • iss:令牌的颁发者,即颁发令牌的 Azure Active Directory 租户。
  • iat:代表“在时间颁发”,表示颁发令牌的时间点。
  • nbf:代表“不在时间之前”,表示目标受众不得接受令牌之前的时间点。
  • exp:代表“到期时间”,表示目标受众不得接受令牌之后的时间点。
  • app_displayname:已为其颁发令牌的应用程序的名称, (目标受众的使用者应用程序) 。
  • name:与令牌相关的用户的完整名称。
  • scp:与当前访问令牌关联的委托权限范围。
  • upn:与令牌相关的用户的用户主体名称。

如果要使用 Microsoft Graph(如上例所示), aud 声明将描述 Microsoft Graph (https://graph.microsoft.com) 。 如果要使用第三方 API/服务, aud 声明将描述该目标 API。 请注意,SharePoint 框架解决方案的app_displayname声明是“SharePoint Online 客户端扩展性 Web 应用程序主体”,这正是本文在简介中提到的应用程序。

注意

对于域隔离解决方案, app_displayname 声明将是 SharePoint Online 服务在 Azure Active Directory 中注册的专用应用程序之一。

在客户端(即在 SharePoint 框架 中),永远不应依赖于访问令牌的实际内容。 提供的示例只是为了了解安全模型的工作原理。 但是,在常见方案中,只需利用 SharePoint 框架 的现成功能,这会隐藏代码中所有使用外部 API 的管道。

在服务端,如果使用 Microsoft Graph,Microsoft负责评估提供的访问令牌,并授权 (或拒绝) 访问请求 API 终结点。 如果要使用实现的第三方 API/服务,则可以依赖于 Microsoft Azure 的配置选项,如果要在 Azure Microsoft 承载服务,或者可以依赖Microsoft身份验证库 (MSAL) 和 Microsoft.Identity.Web 库来验证和授权令牌。

注意

有关Microsoft身份验证库的其他信息,请参阅 MSAL) (Microsoft身份验证库概述 。 有关 Microsoft.Identity.Web 库的更多详细信息,请参阅Microsoft 标识 Web 身份验证库一文。

有关本主题的其他信息,请参阅以下文档: