快速入門:取得權杖,並從 Node.js 主控台應用程式呼叫 Microsoft Graph

在本快速入門中,您會下載並執行程式碼範例,該範例會示範 Node.js 主控台應用程式如何使用應用程式的身分識別來取得存取權杖,以呼叫 Microsoft Graph API 及顯示目錄中的使用者清單。 此程式碼範例會示範自動作業或 Windows 服務如何使用應用程式識別來執行,而不是以使用者的身分識別執行。

本快速入門會使用適用於 Node.js 的 Microsoft 驗證程式庫 (MSAL Node)用戶端授與

必要條件

註冊和下載範例應用程式

遵循下方步驟開始使用。

步驟 1:註冊應用程式

提示

根據您從中開始的入口網站,本文中的步驟可能會略有不同。

若要手動註冊您的應用程式,並將應用程式註冊資訊新增到您的解決方案,請執行下列步驟:

  1. 以至少 應用程式系統管理員 的身分登入 Microsoft Entra 系統管理中心
  2. 瀏覽至 [身分識別] > [應用程式] > [應用程式註冊]
  3. 選取新增註冊
  4. 輸入應用程式的名稱,例如 msal-node-cli。 您的應用程式使用者可能會看到此名稱,而且您稍後可以加以變更。
  5. 選取註冊
  6. 在 [管理] 下,選取 [憑證和密碼]
  7. 在 [用戶端密碼] 底下,選取 [新增用戶端密碼] 並輸入名稱,然後選取 [新增]。 將祕密值記錄在安全的位置,以便在稍後的步驟中使用。
  8. 在 [管理] 底下,選取 [API 權限]>[新增權限]。 選取 [Microsoft Graph]
  9. 選取應用程式權限
  10. 在 [使用者] 節點底下,選取 [User.Read.All],然後選取 [新增權限]

步驟 2:下載 Node.js 範例專案

下載程式碼範例

步驟 3:下載 Node.js 範例專案

  1. 將 Zip 檔案解壓縮至磁碟根目錄附近的本機資料夾,例如 C:/Azure-Samples

  2. 編輯 .env,並將欄位 TENANT_IDCLIENT_IDCLIENT_SECRET 的值取代為下列程式碼片段:

    "TENANT_ID": "Enter_the_Tenant_Id_Here",
    "CLIENT_ID": "Enter_the_Application_Id_Here",
    "CLIENT_SECRET": "Enter_the_Client_Secret_Here"
    

    其中:

    • Enter_the_Application_Id_Here - 是您稍早所註冊應用程式的應用程式 (用戶端) 識別碼。 在應用程式註冊的 [概觀] 中,尋找此識別碼。
    • Enter_the_Tenant_Id_Here請將此值取代為租用戶識別碼租用戶名稱 (例如 contoso.microsoft.com) 在應用程式註冊的 [概觀] 中,尋找這些值。
    • Enter_the_Client_Secret_Here - 請將此值取代為先前所建立的用戶端密碼。 若要產生新的金鑰,請在應用程式註冊設定中使用 [憑證與祕密]

    在原始程式碼中使用純文字密碼會造成應用程式的安全性風險增加。 雖然本快速入門中的範例使用純文字用戶端密碼,但只是為了簡單起見。 在您的機密用戶端應用程式中,特別是您想要部署到實際執行環境的應用程式,建議使用憑證認證,而不是用戶端密碼。

  3. 編輯 ..env,使用下列值取代 Microsoft Entra ID 和 Microsoft Graph 端點:

    • 針對 Microsoft Entra 端點,將 Enter_the_Cloud_Instance_Id_Here 換成 https://login.microsoftonline.com
    • 針對 Microsoft Graph 端點,將 Enter_the_Graph_Endpoint_Here 換成 https://graph.microsoft.com/

如果您嘗試在此時執行應用程式,您將會收到「HTTP 403 - 禁止」錯誤:Insufficient privileges to complete the operation。 之所以發生此錯誤,是因為任何「僅限應用程式權限」都需要應用程式系統管理員:必須由至少獲指派應用程式系統管理員角色的人員向應用程式授與同意。 請根據您的角色選取下列其中一個選項:

系統管理員

如果您至少獲派應用程式系統管理員 (部分機器翻譯) 角色,請移至 Azure 入口網站 [應用程式註冊] 中的 [API 權限] 頁面,然後選取 [授與 {租用戶名稱} 管理員同意] (其中 {租用戶名稱} 為目錄的名稱)。

標準使用者

如果您是租用戶的標準使用者,則必須要求雲端應用程式管理員授與 應用程式的管理員同意 。 若要這樣做,請提供下列 URL 給管理員:

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

其中:

  • Enter_the_Tenant_Id_Here - 請將此值取代為 [租用戶識別碼] 或 [租用戶名稱] (例如 contoso.microsoft.com)
  • Enter_the_Application_Id_Here - 是您註冊的應用程式所具備的應用程式 (用戶端) 識別碼

步驟 5:執行應用程式

找出在命令提示字元或主控台中範例的根資料夾 (package.json 的所在位置)。 第一次執行範例應用程式之前,您必須先安裝範例應用程式所需的相依性:

npm install

然後,透過命令提示字元或主控台執行應用程式:

node . --op getUsers

您應該會在主控台輸出中看到一些 JSON 片段,代表您 Microsoft Entra 目錄中的使用者清單。

關於程式碼

以下將討論範例應用程式的一些重要層面。

MSAL 節點

MSAL 節點是程式庫,用來登入使用者並要求權杖,該權杖是用來存取受 Microsoft 身分識別平台保護的 API。 如前所述,本快速入門會使用應用程式權限 (應用程式本身的身分識別),而非委派的權限來要求權杖。 此案例所使用的驗證流程稱為 OAuth 2.0 用戶端認證流程。 如需有關如何搭配使用 MSAL 節點與精靈應用程式的詳細資訊,請參閱案例:精靈應用程式

您可以執行下列 npm 命令來安裝 MSAL 節點。

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.microsoftonline.com/Enter_the_Tenant_Id_Here",
        clientSecret: "Enter_the_Client_Secret_Here",
   }
};
const cca = new msal.ConfidentialClientApplication(msalConfig);
其中: 描述
clientId 是註冊於 Azure 入口網站中的應用程式所具備的應用程式 (用戶端) 識別碼。 您可以在 Azure 入口網站的應用程式 [概觀] 頁面中找到此值。
authority 供使用者用於驗證的 STS 端點。 若為公用雲端,通常是 https://login.microsoftonline.com/{tenant},其中 {tenant} 是租用戶的名稱或租用戶識別碼。
clientSecret 在 Azure 入口網站中為應用程式建立的用戶端密碼。

如需詳細資訊,請參閱下列項目的參考文件:ConfidentialClientApplication

要求權杖

若要使用應用程式的身分識別來要求權杖,請使用 acquireTokenByClientCredential 方法:

const tokenRequest = {
    scopes: [ 'https://graph.microsoft.com/.default' ],
};

const tokenResponse = await cca.acquireTokenByClientCredential(tokenRequest);
其中: 描述
tokenRequest 包含所要求的範圍。 針對機密用戶端,這應該使用類似 {Application ID URI}/.default 的格式,以指出所要求的範圍是 Azure 入口網站中所設定應用程式物件中以靜態方式定義的範圍 (若為 Microsoft Graph,{Application ID URI} 會指向 https://graph.microsoft.com)。 若為自訂 Web API,在 Azure 入口網站「應用程式註冊」中的 [公開 API] 區段底下會定義 {Application ID URI}
tokenResponse 回應包含所要求之範圍的存取權杖。

說明與支援 

如果您需要協助、想要回報問題,或想要深入了解您的支援選項,請參閱 開發人員的協助與支援

下一步

若要深入了解如何使用 MSAL 節點進行精靈/主控台應用程式開發,請參閱教學課程: