Share via


快速入門:取得令牌,並從 Python 精靈應用程式呼叫 Microsoft Graph

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

Diagram showing how the sample app generated by this quickstart works.

必要條件

若要執行此範例,您需要:

註冊並下載您的快速入門應用程式

步驟 1:註冊您的應用程式

提示

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

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

  1. 登入 Microsoft Entra 系統管理中心。
  2. 如果您有多個租使用者的存取權,請使用頂端功能表中的 [設定] 圖示,切換至您想要從 [目錄 + 訂用帳戶] 功能表註冊應用程式的租使用者。
  3. 流覽至 [身分>識別應用程式> 應用程式註冊],選取 [新增註冊]。
  4. 輸入應用程式的 [名稱],例如 Daemon-console。 您的應用程式使用者可能會看到此名稱,而且您稍後可以加以變更。
  5. 選取註冊
  6. 在 [管理] 下,選取 [憑證與秘密]。
  7. 在 [客戶端密碼] 底下,選取 [新增客戶端密碼],輸入名稱,然後選取 [新增]。 將秘密值記錄在安全的位置,以供稍後步驟使用。
  8. 在 [管理] 底下,選取 [API 許可權>] [新增許可權]。 選取 [Microsoft Graph]。
  9. 選取應用程式權限
  10. 在 [使用者] 節點下,選取 [User.Read.All],然後選取 [新增許可權]。

步驟 2:下載 Python 專案

下載 Python 精靈專案

步驟 3:設定 Python 專案

  1. 將 zip 檔案解壓縮到靠近磁碟根目錄的本機資料夾,例如 C:\Azure-Samples

  2. 流覽至子資料夾 1-Call-MsGraph-WithSecret

  3. 編輯 parameters.json ,並以下列代碼段取代欄位 authorityclient_idsecret 的值:

    "authority": "https://login.microsoftonline.com/Enter_the_Tenant_Id_Here",
    "client_id": "Enter_the_Application_Id_Here",
    "secret": "Enter_the_Client_Secret_Here"
    

    其中:

    • Enter_the_Application_Id_Here - 是您 註冊之應用程式的應用程式(用戶端)標識碼
    • Enter_the_Tenant_Id_Here - 將此值取代為 租使用者識別碼租使用者名稱 (例如,contoso.microsoft.com)
    • Enter_the_Client_Secret_Here - 將此值取代為步驟 1 上建立的客戶端密碼。

提示

若要尋找應用程式(用戶端)標識碼、目錄(租使用者)標識碼的值請移至 Microsoft Entra 系統管理中心的應用程式[概觀] 頁面。 若要產生新的金鑰,請移至 [ 憑證與秘密] 頁面。

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

全域租使用者管理員

如果您是全域租用戶系統管理員,請移至 Microsoft Entra 系統管理中心 應用程式註冊 中的 [API 許可權] 頁面,然後選取 [授與 {Tenant Name} 的管理員同意] (其中 {Tenant Name} 是您目錄的名稱)。

標準使用者

如果您是租用戶的標準使用者,請要求全域管理員授與應用程式的管理員同意。 若要這樣做,請為您的系統管理員提供下列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:執行應用程式

您必須安裝此範例的相依性一次。

pip install -r requirements.txt

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

python confidential_client_secret_sample.py parameters.json

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

重要

本快速入門應用程式會使用客戶端密碼,將自己識別為機密用戶端。 由於客戶端密碼會新增為項目檔的純文本,基於安全性考慮,建議您先使用憑證,而不是客戶端密碼,再將應用程式視為生產應用程式。 如需如何使用憑證的詳細資訊,請參閱 此範例的相同 GitHub 存放庫中的這些指示 ,但在第二個資料夾 2-Call-MsGraph-WithCertificate 中。

其他相關資訊

MSAL Python

MSAL Python 是用來登入使用者和要求令牌的連結庫,用來存取受 Microsoft 身分識別平台 保護的 API。 如所述,本快速入門會使用應用程式擁有的身分識別來要求令牌,而不是委派的許可權。 在此案例中使用的驗證流程稱為客戶端認證 oauth 流程 如需如何搭配精靈應用程式使用 MSAL Python 的詳細資訊,請參閱 這篇文章

您可以執行下列 pip 命令來安裝 MSAL Python。

pip install msal

MSAL 初始化

您可以藉由新增下列程式代碼來新增 MSAL 的參考:

import msal

然後,使用下列程式代碼初始化 MSAL:

app = msal.ConfidentialClientApplication(
    config["client_id"], authority=config["authority"],
    client_credential=config["secret"])
其中: 描述
config["secret"] 這是在 Microsoft Entra 系統管理中心為應用程式建立的客戶端密碼。
config["client_id"] 這是在 Microsoft Entra 系統管理中心註冊之應用程式的應用程式識別碼。 您可以在 Microsoft Entra 系統管理中心的應用程式 [概觀] 頁面中找到此值。
config["authority"] 用戶要驗證的 STS 端點。 通常 https://login.microsoftonline.com/{tenant} 適用於公用雲端,其中 {tenant} 是您租用戶的名稱或租用戶標識符。

如需詳細資訊,請參閱 ConfidentialClientApplication參考檔。

要求令牌

若要使用應用程式的身分識別要求令牌,請使用 AcquireTokenForClient 方法:

result = None
result = app.acquire_token_silent(config["scope"], account=None)

if not result:
    logging.info("No suitable token exists in cache. Let's get a new one from AAD.")
    result = app.acquire_token_for_client(scopes=config["scope"])
其中: 描述
config["scope"] 包含所要求的範圍。 對於機密用戶端,這應該使用類似 {Application ID URI}/.default 的格式來指出所要求的範圍是 Microsoft Entra 系統管理中心應用程式物件集中靜態定義的範圍(針對 Microsoft Graph,{Application ID URI}指向 )。https://graph.microsoft.com 針對自定義 Web API,{Application ID URI}定義於 Microsoft Entra 系統管理中心 應用程式註冊[公開 API] 區段底下。

如需詳細資訊,請參閱 AcquireTokenForClient參考檔。

說明與支援 

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

下一步

若要深入瞭解精靈應用程式,請參閱案例登陸頁面。