快速入门:使用应用的标识获取令牌并从 Node.js 控制台应用中调用 Microsoft Graph API

欢迎使用! 这可能不是你期望看到的页面。 在修复时,此链接应会将你转至正确的文章:

快速入门:获取令牌并从 Node.js 控制台应用中调用 Microsoft Graph API

对此造成你的不便,我们深表歉意;感谢你的耐心等待,我们正在努力解决此问题。

在本快速入门中,你将下载并运行一个代码示例,该示例演示 Node.js 控制台应用程序如何使用应用的标识获取访问令牌来调用 Microsoft Graph API 并在目录中显示用户列表。 代码示例演示无人参与的作业或 Windows 服务如何使用应用程序标识而不是用户标识运行。

本快速入门通过客户端凭据授权使用适用于 Node.js 的 Microsoft 身份验证库 (MSAL Node)

先决条件

下载并配置示例应用

步骤 1:在 Azure 门户中配置应用程序

为使本快速入门的代码示例正常运行,需创建客户端机密,并添加 Graph API 的 User.Read.All 应用程序权限。

Already configured 应用程序已使用这些属性进行配置。

步骤 2:下载 Node.js 示例项目

注意

Enter_the_Supported_Account_Info_Here

如果尝试在此时运行应用程序,则会收到“HTTP 403 - 禁止访问”错误:Insufficient privileges to complete the operation。 之所以出现这种错误,是因为任何仅限应用的权限都需要管理员同意:目录的全局管理员必须为应用程序授予同意。 根据自己的角色选择下面的一个选项:

全局租户管理员

如果你是全局管理员,请转到“API 权限”页面,选择“为 > Enter_the_Tenant_Name_Here 授予管理员同意”

标准用户

如果你是租户的标准用户,则需请求全局管理员为你的应用程序授予管理员同意。 为此,请将以下 URL 提供给管理员:

https://login.partner.microsoftonline.cn/Enter_the_Tenant_Id_Here/adminconsent?client_id=Enter_the_Application_Id_Here

步骤 4:运行应用程序

定位到命令提示符或控制台中示例的根文件夹(package.json 所在位置)。 需要安装一次此示例的依赖项:

npm install

然后,通过命令提示符或控制台运行应用程序:

node . --op getUsers

应该会在控制台输出上看到一些 JSON 片段,表示 Microsoft Entra 目录中的用户列表。

关于代码

下面讨论了示例应用程序的一些重要方面。

MSAL Node

MSAL Node 是一个用于登录用户和请求令牌的库,此类令牌用于访问受 Microsoft 标识平台保护的 API。 如前所述,本快速入门通过应用程序权限请求令牌(使用应用程序自身的标识),而不是通过委托的权限。 此示例中使用的身份验证流称为 OAuth 2.0 客户端凭据流。 若要详细了解如何搭配使用 MSAL Node 和守护程序应用,请参阅方案:守护程序应用程序

可通过运行以下 npm 命令安装 MSAL Node。

npm install @azure/msal-node --save

MSAL 初始化

可以通过添加以下代码,为 MSAL 添加引用:

const msal = require('@azure/msal-node');

然后,使用以下代码对 MSAL 进行初始化:

const msalConfig = {
    auth: {
        clientId: "Enter_the_Application_Id_Here",
        authority: "https://login.partner.microsoftonline.cn/Enter_the_Tenant_Id_Here",
        clientSecret: "Enter_the_Client_Secret_Here",
   }
};
const cca = new msal.ConfidentialClientApplication(msalConfig);
其中: 说明
clientId 是在 Azure 门户中注册的应用程序的应用程序(客户端) ID。 可以在 Azure 门户的应用的“概览”页中找到此值。
authority 用户要进行身份验证的 STS 终结点。 对于公有云,通常为 https://login.partner.microsoftonline.cn/{tenant},其中 {tenant} 是租户名称或租户 ID。
clientSecret 是在 Azure 门户中为应用程序创建的客户端机密。

有关详细信息,请参阅 ConfidentialClientApplication 的参考文档

请求令牌

若要通过应用的标识来请求令牌,请使用 acquireTokenByClientCredential 方法:

const tokenRequest = {
    scopes: [ 'https://microsoftgraph.chinacloudapi.cn/.default' ],
};

const tokenResponse = await cca.acquireTokenByClientCredential(tokenRequest);
其中: 说明
tokenRequest 包含请求的范围。 对于机密客户端,这应该使用与 {Application ID URI}/.default 类似的格式,指示所请求的范围是在 Azure 门户的应用对象集中静态定义的范围(就 Microsoft Graph 来说,{Application ID URI} 指向 https://microsoftgraph.chinacloudapi.cn)。 对于自定义 Web API,{Application ID URI} 在 Azure 门户的“应用程序注册”的“公开 API”部分中定义。
tokenResponse 响应包含所请求范围的访问令牌。

帮助和支持

如果需要帮助、需要报告问题,或者需要详细了解支持选项,请参阅面向开发人员的帮助和支持

后续步骤

若要详细了解如何通过 MSAL Node 进行守护程序/控制台应用开发,请参阅教程: