在本機開發期間,應用程式必須向 Azure 進行驗證,才能使用不同的 Azure 服務。 使用下列其中一種方法在本機進行驗證:
- 將開發人員帳戶與 Azure 身分識別程式庫支援的其中一個開發人員工具搭配使用。
- 使用 服務主體。
本文說明如何使用開發人員帳戶搭配 Azure 身分識別程式庫支援的工具進行驗證。 在前面的章節中,您將學習:
- 如何使用 Microsoft Entra 群組有效率地管理多個開發人員帳戶的許可權。
- 如何將角色指派給開發人員帳戶以限定權限範圍。
- 如何登入支援的本機開發工具。
- 如何使用應用程式程式碼中的開發人員帳戶進行驗證。
驗證的開發人員支援工具
若要讓應用程式在本地開發時使用開發者的 Azure 憑證認證 Azure,開發者必須使用 Azure CLI 登入 Azure。
Azure Identity 函式庫可以偵測開發者已從工具登入。 然後,程式庫可以透過工具取得 Microsoft Entra 存取權杖,以登入使用者身分向 Azure 驗證應用程式。
此方法會利用開發人員現有的 Azure 帳戶來簡化驗證程式。 不過,開發人員帳戶的許可權可能多於應用程式所需的許可權,因此會超出應用程式在生產環境中執行的許可權。 或者,您可以 建立應用程式服務主體以在本機開發期間使用,其範圍可以設定為僅具有應用程式所需的存取權。
建立 Microsoft Entra 群組以進行本機開發
建立 Microsoft Entra 群組,以封裝應用程式在本機開發中所需的角色 (權限),而不是將角色指派給個別服務主體物件。 此方法提供下列優點:
- 每個開發人員在群組層級都指派相同的角色。
- 如果應用程式需要新角色,則只需要將其新增至應用程式的群組即可。
- 如果新的開發人員加入小組,則會為開發人員建立新的應用程式服務主體,並新增至群組,以確保開發人員具有在應用程式上工作的正確權限。
流覽至 Azure 入口網站中的 Microsoft Entra ID 概觀頁面。
從左側功能表中選取 [所有群組]。
在 [群組] 頁面上,選取 [新增群組]。
在 [新增群組 ] 頁面上,填寫下列表單欄位:
- 群組類型:選取 [安全性]。
- 群組名稱:輸入包含應用程式或環境名稱參考的群組名稱。
- 群組描述:輸入說明群組用途的描述。
選取 [成員] 下方的 [未選取任何成員] 連結,為群組新增成員。
在開啟的飛出視窗面板中,搜尋您稍早建立的服務主體,然後從篩選的結果中選取它。 選擇面板底部的「 選取」 按鈕以確認您的選擇。
選取 [新增群組] 頁面底部的 [建立] 以建立群組,然後返回 [所有群組] 頁面。 如果您沒有看到列出的新群組,請稍候一下並重新整理頁面。
將角色指派給群組
接下來,判斷您的應用程式在哪些資源上需要哪些角色 (許可權),並將這些角色指派給您建立的 Microsoft Entra 群組。 群組可以在資源、資源群組或訂閱範圍內被指派角色。 此範例示範如何在資源群組範圍指派角色,因為大部分的應用程式都會將其所有 Azure 資源分組到單一資源群組中。
在 Azure 入口網站中,流覽至包含應用程式之資源群組的 [ 概觀 ] 頁面。
從左側導覽中選擇 存取控制(IAM)。
在 [存取控制 (IAM)] 頁面上,選取 [+ 新增],然後從下拉選單中選擇 [新增角色指派]。 新增 角色指派 頁面提供數個索引標籤來設定和指派角色。
在 [ 角色 ] 索引標籤上,使用搜尋方塊來尋找您要指派的角色。 選取角色,然後選擇 下一步。
在 「成員」 標籤上:
- 針對 [指派存取權] 值,選取 [使用者、群組或服務主體] 。
- 針對 [成員] 值,選擇 [+ 選取成員] 以開啟 [選取成員] 彈出面板。
- 搜尋您稍早建立的 Microsoft Entra 群組,然後從篩選的結果中選取它。 選擇 選擇 以選擇群組,然後關閉彈出面板。
- 請在 成員 索引標籤的底部選取 檢閱 + 指派。
在 [ 檢閱 + 指派 ] 索引標籤上,選取頁面底部的 [ 檢閱 + 指派 ]。
使用開發人員工具登入 Azure
請使用多種開發工具之一登入 Azure,這些工具可用於在你的開發環境中進行認證。 您驗證的帳戶也應該存在於您稍早建立和設定的 Microsoft Entra 群組中。
Azure CLI
開發人員可以使用 Azure CLI 進行驗證。 使用 DefaultAzureCredential 或 AzureCliCredential 的應用程式可以使用此帳號來驗證應用程式請求。
若要使用 Azure CLI 進行驗證,請執行 az login 命令。 在具有預設網頁瀏覽器的系統上,Azure CLI 會啟動瀏覽器來驗證使用者。
az login
對於沒有預設網頁瀏覽器的系統,az login 命令會使用裝置程式代碼驗證流程。 使用者也可以強制 Azure CLI 使用裝置程式代碼流程,而不是藉由指定 --use-device-code 自變數來啟動瀏覽器。
az login --use-device-code
從您的應用程式向 Azure 服務進行驗證
C++ 的 Azure Identity 函式庫提供多種憑證,以支援不同情境及 Microsoft Entra 認證流程。 接下來的步驟示範如何在本機使用使用者帳戶時使用 DefaultAzureCredential 。
實作程序代碼
DefaultAzureCredential 類別是一連串有序的機制,用於驗證 Microsoft Entra ID。 每個認證機制都是從該 TokenCredential 類別衍生出來的類別,稱為 憑證。 在此情境中, DefaultAzureCredential 依序檢查開發者是否已使用 Azure CLI 登入 Azure。 如果開發者已登入 Azure CLI,應用程式將使用用來登入 Azure CLI 的憑證來進行 Azure 的驗證。 欲了解更多關於自訂憑證鏈的資訊,請參閱 「如何自訂 DefaultAzureCredential」。
使用 vcpkg 將 azure-identity-cpp 套件加入你的應用程式。
vcpkg add port azure-identity-cpp在你的 CMake 檔案中加入以下幾行:
find_package(azure-identity-cpp CONFIG REQUIRED) target_link_libraries(<your project name> PRIVATE Azure::azure-identity)對於任何在應用程式中建立 Azure SDK 客戶端物件的 C++ 程式碼,你應該:
請附上
azure/identity.hpp標頭。使用
DefaultAzureCredential或AzureCliCredential建立憑證實例。 例如:使用
DefaultAzureCredential時,將環境變數AZURE_TOKEN_CREDENTIALS設為dev,表示該應用程式正在開發環境中執行。 如需詳細資訊,請參閱 如何自訂 DefaultAzureCredential。// Environment variable AZURE_TOKEN_CREDENTIALS=dev auto credential = std::make_shared<Azure::Identity::DefaultAzureCredential>(true);或是始終使用
AzureCliCredentialAzure CLI 登入的使用者來進行認證。auto credential = std::make_shared<Azure::Identity::AzureCliCredential>();
將 的
DefaultAzureCredentialAzureCliCredential實例傳遞給 Azure SDK 客戶端建構器。
下列步驟的範例會顯示在下列程式代碼區段中。 這個範例建立一個 Azure Storage Blob 用戶端,使用
DefaultAzureCredential來驗證至 Azure。#include <azure/identity.hpp> #include <azure/storage/blobs.hpp> #include <iostream> #include <memory> int main() { try { // DefaultAzureCredential supports dev, test, and prod environments. // See documentation for details on customizing the credential chain: // https://learn.microsoft.com/azure/developer/cpp/sdk/authentication/credential-chains#defaultazurecredential-overview // In production, it's better to use a specific credential type so authentication is more predictable and easier to debug. // Here DefaultAzureCredential is used for local development and environment variable AZURE_TOKEN_CREDENTIALS=dev auto credential = std::make_shared<Azure::Identity::DefaultAzureCredential>(true); // Or use AzureCliCredential to always use the Azure CLI signed-in user to authenticate // auto credential = std::make_shared<Azure::Identity::AzureCliCredential>(); // Create a client for the specified storage account std::string accountUrl = "https://<replace_with_your_storage_account_name>.blob.core.windows.net/"; Azure::Storage::Blobs::BlobServiceClient blobServiceClient(accountUrl, credential); // Get a reference to a container std::string containerName = "sample-container"; auto containerClient = blobServiceClient.GetBlobContainerClient(containerName); // TODO: perform some action with the blob client // auto blobClient = containerClient.GetBlobClient("sample-blob"); // auto downloadResult = blobClient.DownloadTo("path/to/local/file"); } catch (const std::exception& ex) { std::cout << "Exception: " << ex.what() << std::endl; return 1; } return 0; }