在 MSAL 节点中初始化机密客户端应用程序

本文介绍如何在 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 必须初始化公共客户端应用程序
  • authority https://login.microsoftonline.com/common/如果用户在配置过程中未设置它,则默认为
  • 客户端凭据是机密客户端的必需项。 客户端凭据可以是:
    • clientSecret 是在应用注册上生成的机密字符串。
    • clientCertificate 是在应用注册上设置的证书。 thumbprintSha256是证书的 X.509 SHA-256 指纹,是 privateKey PEM 编码的私钥。 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}'

后续步骤