在 MSAL Node 中初始化機密用戶端應用程式

這篇文章會教你如何在 MSAL Node 中初始化物件 ConfidentialClientApplication 。 你將學會如何安全使用秘密和憑證,以及如何設定權限。

先決條件

在初始化應用程式之前,首先需要在 Microsoft Entra 系統管理中心 註冊它,建立應用程式與 Microsoft 身分識別平台 之間的信任關係。

註冊應用程式後,您需要在 Microsoft Entra 系統管理中心 中找到部分或全部以下數值。

價值 必要 Description
應用程式 (用戶端) 識別碼 必要 一個能在 Microsoft 身分識別平台 中唯一識別你的應用程式的 GUID。
權威 Optional 身份提供者的網址( 實例)以及你的應用程式的 登入受眾 。 執行個體與登入對象串接後,即構成 authority
目錄(租戶)識別碼 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 需要從代幣發行者取得代幣時,都會啟動回調。 應用程式開發者通常應該使用回調,因為斷言會過期,需要建立新的斷言。 App 開發者需負責宣告的生命週期。 利用 此機制 取得下游 API 的憑證,使用聯邦身份憑證(Federated Identity Credential)。

關於 更多配置 選項,請參考 MSAL 節點中的配置

設定權威

預設情況下,MSAL 已設定為使用 common 租用戶,此租用戶適用於多租用戶應用程式,以及允許個人帳戶的應用程式(不含 B2C)。

    authority: 'https://login.microsoftonline.com/common/'

如果您的應用程式受眾為單一租戶,您必須提供如下的租戶 ID 授權:

    authority: 'https://login.microsoftonline.com/{your_tenant_id}'

後續步驟