Share via


快速入門:從Node.js控制台應用程式取得令牌並呼叫 Microsoft Graph

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

本快速入門使用 Microsoft Authentication Library for Node.js (MSAL Node) 搭配用戶端認證授

必要條件

註冊並下載範例應用程式

請遵循下列步驟來開始使用。

步驟 1:註冊應用程式

提示

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

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

  1. 以至少應用程式 管理員 istrator 身分登入 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_Herehttps://login.microsoftonline.com
    • 針對 Microsoft Graph 端點,將 取代 Enter_the_Graph_Endpoint_Herehttps://graph.microsoft.com/

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

系統管理員

如果您至少獲派應用程式 管理員 istrator 角色,請移至 Azure 入口網站 應用程式註冊中的 [API 許可權] 頁面,然後選取 [授與 {Tenant Name} 的管理員同意] (其中 {Tenant Name} 是您目錄的名稱)。

標準使用者

如果您是租用戶的標準使用者,則必須要求 Global 管理員 istrator 授與應用程式的管理員同意。 若要這樣做,請為您的系統管理員提供下列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 Node 是用來登入使用者和要求令牌的連結庫,用來存取受 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,{Application ID URI}定義於 Azure 入口網站 應用程式註冊的 [公開 API] 區段底下
tokenResponse 回應包含所要求範圍的存取令牌。

說明與支援 

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

下一步

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