创建 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 将内容和文档读取和写入容器,因为这些作可以使用 app+用户或委派权限执行。
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 嵌入式容器
服务器端 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 嵌入式容器列表
要执行的另一个常见任务是获取所有容器的列表。 此请求的要求与创建容器的要求相同。
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。