创建 REST API 以使用 SharePoint Embedded 处理读取和显示操作

已完成

SharePoint Embedded 应用程序(与大多数与后端存储系统和数据库交互的应用程序)执行两种类型的操作:读取/检索数据和文件,以及存储或删除文件。 在本部分中,你将了解如何使用 Microsoft Graph REST API 访问 SharePoint Embedded Containers。

自定义应用程序概述以及它如何与 SharePoint Embedded、SharePoint Online 和 Microsoft Graph 配合使用

本模块中的以下练习将引导你完成创建 Web 应用的步骤,Web 服务可以管理 SharePoint Embedded Containers,并使用这些容器上的文档执行 CRUD 操作。

让我们看一下要生成的应用程序的两个组件以及每个组件负责的内容。

实现用户体验的 Web 应用程序

用户界面是使用 React 实现的, (SPA) 创建单页应用程序。 此应用程序可以使用 Microsoft Graph 将内容和文档读取和写入容器,因为这些操作可以使用应用+用户或委派的权限来执行。

Web 应用程序将使用 Fluent UI React Controls (v9) 和 Microsoft Graph Toolkit (v3) 使用不同的用户界面组件来简化用户体验的创建。

并非所有操作都可以由客户端 React 应用程序执行,因为它们需要只能在服务器端处理的提升权限。

用于处理更高特权操作的服务器端 API

并非所有容器操作都可以由 React 应用程序直接执行。 对于这些方案,包括创建、删除和获取 SharePoint 嵌入式容器的列表,我们将创建服务器端 API 服务器

对于此项目,可以使用 Azure Functions 应用程序或使用 Azure Web 应用来托管 ASP.NET Web API 项目。 在我们的项目中,我们将使用轻型 Node.js Restify 服务器。

此 API 将接收来自 React SPA 的请求,其中包括用户在登录到应用程序时收到的访问令牌。 你将使用此访问令牌和 OBO 流来获取适用于 Microsoft Graph 的访问令牌,该令牌可用于以用户身份执行容器操作。

使用 Microsoft Graph 创建 SharePoint Embedded Containers

服务器端 API 需要创建容器和其他任务。 这将由服务器端 API 使用代理流来获取适用于 Microsoft Graph 的访问令牌。

此调用首先由 React SPA 发起,其中包含当前已登录用户的访问令牌。

API 服务器将首先使用 Microsoft 身份验证库 (MSAL) 创建 实例 ConfidentialClientApplication 。 若要创建 , ConfidentialClientApplication 请使用应用的客户端 ID 和客户端密码通过 Microsoft Entra ID 进行身份验证:

const msalConfig: MSAL.Configuration = {
  auth: {
    clientId: process.env['API_ENTRA_APP_CLIENT_ID']!,
    authority: process.env['API_ENTRA_APP_AUTHORITY']!,
    clientSecret: process.env['API_ENTRA_APP_CLIENT_SECRET']!
  }
};

const confidentialClient = new MSAL.ConfidentialClientApplication(msalConfig);

然后,使用 ConfidentialClientApplication 来代表当前用户获取访问令牌,方法是将用户登录中提供的访问令牌交换为可以调用 Microsoft Graph 的访问令牌:

// get user's access token from the request submitted by the React SPA
const [bearer, token] = req.headers.authorization.split(' ');

// set that token to the assertion and the scopes to the permissions we
//    need in the access token to call Microsoft Graph
const graphTokenRequest = {
  oboAssertion: token,
  scopes: [
    Scopes.GRAPH_SITES_READ_ALL,
    Scopes.SPREPOSERVICES_FILESTORAGECONTAINER_SELECTED
  ]
};

// obtain the OBO token using the ConfidentialClientApplication object
const ccaOboResponse = await confidentialClient.acquireTokenOnBehalfOf(graphTokenRequest);
const oboGraphToken = ccaOboResponse!.accessToken;

现在,你已获得 Microsoft Graph 的 OBO 令牌,请创建一个身份验证提供程序,然后创建 Microsoft Graph 客户端的实例,以简化对 Microsoft Graph REST API 的调用:

const authProvider = (callback: MSGraph.AuthProviderCallback) => {
  callback(null, graphTokenRequest);
};

const graphClient = MSGraph.Client.init({
  authProvider: authProvider,
  defaultVersion: 'beta'
});

最后,将 HTTP POST 请求提交到 Microsoft Graph 的 https://graph.microsoft.com/{version}/storage/fileStorage/containers 终结点以创建新的容器:

const containerRequestData = {
  displayName: 'New container name',
  description: 'New container description',
  containerTypeId: process.env["CONTAINER_TYPE_ID"]
};

const graphResponse = await graphClient.api(`storage/fileStorage/containers`)
                                       .post(containerRequestData);

使用 Microsoft Graph 获取 SharePoint Embedded Containers 列表

要执行的另一个常见任务是获取所有容器的列表。 此请求的要求与创建容器的要求相同。

Microsoft Graph 客户端的身份验证和初始化与创建容器相同。 唯一的区别是提交到 Microsoft Graph 的请求。 在本例中。 你将向同 https://graph.microsoft.com/{version}/storage/fileStorage/containers 一终结点发出 HTTP GET:

const graphResponse = await graphClient.api(`storage/fileStorage/containers?$filter=containerTypeId eq ${process.env["CONTAINER_TYPE_ID"]}`).get();

摘要

在本部分中,你了解了如何使用 Microsoft Graph REST API 访问 SharePoint Embedded Containers。