该版本支持多重身份验证流,并增强了大文件上传任务。新版本中引入的更改是不向后兼容的,关于升级客户端的具体操作请参见升级指导书。
Microsoft Graph JS SDK 3.0.0 需要 Node.js 12 LTS 或更高版本。源码使用 TypeScript 4.x 实现。
认证增强
在这次更新中,微软通过添加对 @azure/msal-browser 和 @azure/identity 的支持,实现了对多重身份验证流的支持。此更新还删除了 ImplicitMSALAuthenticationProvider。
使用 @azure/msal-browser 支持认证代码流
Microsoft Graph JavaScript SDK 3.0.0 通过引入 AuthCodeMSALBrowserAuthenticationProvider 类来增强身份验证。这个类增加了使用 @azure/msal-browser 进行身份验证的支持。这个 MSAL 库支持基于浏览器的应用程序的 PKCE 授权代码流。
如果想知道它是否是你需要的认证提供程序,请访问微软 Docs 的宝库文章👇 Choose a Microsoft Graph authentication provider based on scenario
import {
PublicClientApplication,
InteractionType,
AccountInfo,
} from "@azure/msal-browser";
import {
AuthCodeMSALBrowserAuthenticationProvider,
AuthCodeMSALBrowserAuthenticationProviderOptions,
} from "@microsoft/microsoft-graph-client/authProviders/authCodeMsalBrowser";
const options: AuthCodeMSALBrowserAuthenticationProviderOptions = {
account,
interactionType: InteractionType.PopUp,
scopes: ["user.read", "mail.send"],
};
const authProvider = new AuthCodeMSALBrowserAuthenticationProvider(
publicClientApplication,
options
);
const graphClient = Client.initWithMiddleware({
authprovider,
});
使用 @azure/identity 启用客户端凭据流等功能
JavaScript SDK 3.0.0 引入了 TokenCredentialAuthenticationProvider 类,它允许使用 @azure/identity 身份凭证类进行身份验证。
TokenCredentialAuthenticationProvider 类添加了以下新功能:
- 使用证书类 (如 ClientSecretCredential 或 ClientCertificateCredential) 进行服务器端身份验证。
- 使用证书类 (如 DeviceCodeCredential、VisualStudioCodeCredential和DefaultAzureCredential) 支持多重身份验证流。
TokenCredentialAuthenticationProvider. creating an instance of TokenCredentialAuthentication
删除了 ImplicitMSALAuthenticationProvider
ImplicitMSALAuthenticationProvider 类将从 3.0.0 版的 Microsoft Graph JavaScript SDK 开始不可用。
根据 OAuth 2.0隐式授权,微软不再推荐使用 ImplicitMSALAuthenticationProvider,即使用隐式授权流。
使用Node.js Stream上传较大的文件
LargeFileTaskUpload 类允许你上传文件到 OneDrive、Outlook 和 Universal Print。在这个版本中,微软添加了 StreamUpload(支持 Node.JS Stream) 和 FileUpload(支持 ArrayBuffer、Blob 和 Buffer 等文件格式的上传)。
现在可以使用 UploadEventHandlers 跟踪上传的进度。
下面的示例展示了如何使用新的 StreamUpload 类。
import StreamUpload from "@microsoft/microsoft-graph-client";
import * as fs from "fs";
const fileName = "<FILE_NAME>";
const stats = fs.statSync(`./test/sample_files/${fileName}`);
const totalsize = stats.size;
const readStream = fs.createReadStream(`./test/sample_files/${fileName}`);
const fileObject = new StreamUpload(readStream, fileName, totalsize);
const progress = (range?: Range, extraCallBackParam?: unknown) => {
};
const uploadEventHandlers: UploadEventHandlers = {
progress,
extraCallBackParam,
};
const options: LargeFileUploadTaskOptions = {
rangeSize: 327680,
uploadEventHandlers: UploadEventHandlers,
};
const uploadTask = new LargeFileUploadTask(client, fileObj, uploadSession, options);
const uploadResult: UploadResult = await uploadTask.upload();
要了解关于此更新的更多信息,请参阅大文件上传任务。
|