使用 MSAL Node 進行主體名稱/簽發者 (SNI) 驗證

Warning

在開始之前,請先了解 搭配 MSAL Node 使用憑證認證

SNI(主體名稱/發行者)認證允許應用程式使用來自預先設定的可信憑證(CA)的公開憑證進行認證,以支援複雜的憑證轉移情境。 它 使用 X5C 標頭參數 來提供憑證給伺服器。

第一方使用者應依照 內部 Microsoft Entra wiki 中的指示,設定 Microsoft Entra 環境以支援 SNI。

x5c 主張

除了提供 clientCertificate.thumbprintSha256clientCertificate.privateKey 外,還需要將 pem 編碼憑證中的字串提供給 MSAL 組態物件中的 clientCertificate.x5c 欄位:

來自.pem檔案的x5c範例字串:

-----BEGIN CERTIFICATE-----
<cert1>
-----END CERTIFICATE-----

-----BEGIN CERTIFICATE-----
<cert2>
-----END CERTIFICATE-----

// ...

另見: 憑證:將 pfx 轉換為 pem

應用程式設定

安全使用秘密與憑證

秘密絕不應該被硬編碼。 dotenv npm 套件可用來將秘密或憑證儲存在 .env 檔案(位於專案根目錄中),這些檔案應包含在 .gitignore 中,以防止秘密誤上傳。

憑證也可以透過 NodeJS 的 fs 模組從檔案讀取。 然而,這些資料絕不應儲存在專案目錄中。 生產應用程式應該從 Azure KeyVault 或其他安全金鑰庫取得憑證。

詳情請參閱 證書與秘密

請參閱 MSAL 範例: auth-code-with-certs

以下程式碼片段示範如何初始化 MSAL,以用於主體名稱/簽發者(SNI)驗證:

var msal = require('@azure/msal-node');
require('dotenv').config(); // process.env now has the values defined in a .env file

const config = {
    auth: {
        clientId: "ENTER_CLIENT_ID",
        authority: "https://login.microsoftonline.com/ENTER_TENANT_ID",
        clientCertificate: {
                thumbprintSha256: process.env.thumbprint, // a 64-digit hexadecimal string
                privateKey: process.env.privateKey,
                x5c: process.env.x5c 
            }
   }
}
};

// Create msal application object
const cca = new msal.ConfidentialClientApplication(config);

常見問題

請參考匯 入憑證時的常見問題