本文介绍如何在 MSAL Node 中初始化 ConfidentialClientApplication 对象。 你将学习如何安全地使用机密和证书,以及如何配置机构。
先决条件
在初始化应用程序之前,首先需要在Microsoft Entra 管理中心中注册它,并在应用程序与Microsoft 标识平台之间建立信任关系。
注册应用后,你将需要可在Microsoft Entra 管理中心中找到的部分或全部以下值。
| 价值 | 必选 | Description |
|---|---|---|
| 应用程序(客户端)ID | 必选 | 用于在 Microsoft 标识平台中唯一标识您的应用程序的 GUID。 |
| 权威 | Optional | 标识提供者 URL( 实例)和应用程序的 登录受众 。 实例和登录受众拼接后构成 authority。 |
| 目录(租户)ID | Optional | 如果你正在构建仅供自己组织使用的业务线应用(通常称为 单租户应用程序),请指定目录(租户)ID。 |
| 重定向 URI | Optional | 如果要构建 Web 应用,redirectUri 会指定标识提供者(Microsoft 标识平台)应将其颁发的安全令牌返回到何处。 |
初始化 ConfidentialClientApplication 对象
若要使用 MSAL Node,需要实例化 ConfidentialClient 对象。
安全地使用机密和证书
不应对机密进行硬编码。 dotenv npm 包可用于将机密或证书存储在 .env 文件(位于项目的根目录中)中,该文件应包含在 .gitignore 中,以防止意外上传机密。
还可以通过 NodeJS 的 fs 模块从文件中读取证书。 但是,不应将它们存储在项目的目录中。 生产应用应从 Azure KeyVault 或其他安全密钥保管库中提取证书。
有关详细信息 ,请参阅证书和机密 。
请参阅 MSAL 示例: auth-code-with-certs
import * as msal from "@azure/msal-node";
import "dotenv/config"; // process.env now has the values defined in a .env file
const clientAssertionCallback = async (config) => {
// network request that uses config.clientId and (optionally) config.tokenEndpoint
const result = await Promise.resolve(
"network request which gets assertion"
);
return result;
};
const clientConfig = {
auth: {
clientId: "your_client_id",
authority: "your_authority",
clientSecret: process.env.clientSecret, // OR
clientCertificate: {
thumbprintSha256: process.env.thumbprint,
privateKey: process.env.privateKey,
}, // OR
clientAssertion: clientAssertionCallback, // or a predetermined clientAssertion string
},
};
const cca = new msal.ConfidentialClientApplication(clientConfig);
请参阅 导入证书时的常见问题。
配置基础知识
节点的配置选项具有common个参数,并且每个身份验证流程具有specific个参数。
-
clientId必须初始化公共客户端应用程序 -
authorityhttps://login.microsoftonline.com/common/如果用户在配置过程中未设置它,则默认为 - 客户端凭据是机密客户端的必需项。 客户端凭据可以是:
-
clientSecret是在应用注册上生成的机密字符串。 -
clientCertificate是在应用注册上设置的证书。thumbprintSha256是证书的 X.509 SHA-256 指纹,是privateKeyPEM 编码的私钥。x5c是 使用者名称/颁发者身份验证方案中使用的可选 X.509 证书链。 -
clientAssertion是包含断言字符串或回调函数的 ClientAssertion 对象,该函数返回应用程序在请求令牌时使用的断言字符串,以及断言的类型(urn:ietf:params:oauth:client-assertion-type:jwt-bearer)。 每次 MSAL 需要从令牌颁发者获取令牌时,都会调用该回调。 应用开发人员通常应使用回调,因为断言过期,需要创建新的断言。 应用开发人员负责断言的生命周期。 使用此机制可通过联合标识凭据获取用于调用下游 API 的令牌。
-
有关 配置 的详细信息,请参阅 MSAL 节点中的配置。
配置颁发机构
默认情况下,MSAL 配置为使用 common 租户,该租户用于多租户应用程序以及允许个人帐户(非 B2C)的应用程序。
authority: 'https://login.microsoftonline.com/common/'
如果你的应用受众是单租户,你必须提供包含你的租户 ID 的机构,如下所示:
authority: 'https://login.microsoftonline.com/{your_tenant_id}'