於本機開發期間使用開發人員帳戶向 Azure 服務驗證 .NET 應用程式
開發人員必須在本機工作站上偵錯及測試雲端應用程式。 當應用程式在本機開發期間於開發人員的工作站上執行時,仍必須向應用程式使用的任何 Azure 服務進行驗證。 本文涵蓋如何使用開發人員的 Azure 認證,在本機開發期間向 Azure 驗證應用程式。
若要讓應用程式在使用開發人員的 Azure 認證進行本機開發期間向 Azure 進行驗證,開發人員必須從下列其中一個開發人員工具登入 Azure:
- Visual Studio
- Azure CLI
- Azure Developer CLI
- Azure PowerShell
Azure 身分識別程式庫可以偵測開發人員是否從其中一個工具登入。 接著,程式庫可以透過工具取得 Microsoft Entra 存取權杖,以將應用程式作為登入使用者向 Azure 進行驗證。
這種方法對開發小組而言最容易設定,因為使用的是開發人員現有 Azure 帳戶。 不過,開發人員帳戶擁有的權限可能比應用程式需要的權限還多,因此超出應用程式在實際執行環境中執行時的權限。 您可以改為建立在本機開發期間使用的應用程式服務主體,設定其權限範圍與應用程式需要的存取權相符。
1 - 建立 Microsoft Entra 群組以進行本機開發
由於應用程式工作幾乎都需要多名開發人員,因此建議使用 Microsoft Entra 群組來封裝應用程式在本機開發中需要的角色 (權限)。 這些方法提供下列優點:
- 由於角色是在群組層級指派,因此指派給每位開發人員的角色都能保證相同。
- 如果應用程式需要新角色,只要在應用程式的群組新增即可。
- 如果新的開發人員加入小組,他們會在新增至群組之後,取得應用程式工作的必要權限。
如果您的開發小組已經有 Microsoft Entra 群組,您可以使用該群組。 否則,請完成下列步驟以建立 Microsoft Entra 群組。
注意
根據預設,建立 Microsoft Entra 群組僅限於目錄中的特定特殊權限角色。 如果無法建立群組,請連絡目錄的系統管理員。 如果無法將成員新增至現有的群組,請連絡群組擁有者或目錄系統管理員。 若要深入了解,請參閱管理 Microsoft Entra 群組和群組成員資格。
2 - 將角色指派給 Microsoft Entra 群組
接著,請決定應用程式針對哪些資源需要哪些角色 (權限),並將這些角色指派給應用程式。 在此範例中,角色會指派給在步驟 1 中建立的 Microsoft Entra 群組。 群組可以在資源、資源群組或訂閱範圍內獲派角色。 此範例會顯示如何在資源群組範圍內指派角色,因為多數應用程式都會將所有 Azure 資源劃分在單一資源群組中。
3 - 使用開發人員工具登入 Azure
接下來,使用其中一個開發人員工具登入 Azure。 您驗證的帳戶也應該存在於您稍早建立和設定的 Microsoft Entra 群組中。
瀏覽至 [工具]>[選項] 以開啟 [選項] 對話方塊。
在頂端的 [搜尋選項] 方塊中,輸入 Azure 以篩選可用的選項。
在 [Azure 服務驗證] 下方,選擇 [帳戶選取]。
選取 [選擇帳戶] 下方的下拉式功能表,然後選擇新增 Microsoft 帳戶。 視窗隨即開啟,提示您挑選帳戶。 輸入您要使用的 Azure 帳戶認證,然後選取確認。
選取 [確定] 以關閉 [選項] 對話方塊。
4 - 在應用程式中實作 DefaultAzureCredential
DefaultAzureCredential 是向 Microsoft Entra 驗證的固定按順序機制序列。 每個驗證機制的類別都是衍生自 TokenCredential 類別,稱為認證。 在執行階段中,DefaultAzureCredential
會嘗試使用第一個認證進行驗證。 如果該認證無法取得存取權杖,則會嘗試序列中的下一個認證,依序進行,直到成功取得存取權杖為止。 因此,您的應用程式可以在相異環境中使用不同的認證,而不需要撰寫環境特定程式碼。
DefaultAzureCredential
尋找認證的順序和位置,可在 DefaultAzureCredential (英文) 中找到。
若要使用 DefaultAzureCredential
,請新增 Azure.Identity,並選擇性將 Microsoft.Extensions.Azure 套件新增至您的應用程式:
在您選擇的終端機中,瀏覽至應用程式專案目錄,然後執行下列命令:
dotnet add package Azure.Identity
dotnet add package Microsoft.Extensions.Azure
使用來自各種 Azure SDK 用戶端程式庫的特殊用戶端類別以存取 Azure 服務。 這些類別和您自訂的服務都應註冊,使其可在應用程式中透過相依性插入來存取。 在 Program.cs
中,完成下列步驟以註冊用戶端類別和 DefaultAzureCredential
:
- 透過
using
指示詞包含Azure.Identity
和Microsoft.Extensions.Azure
命名空間。 - 使用對應的以
Add
為前置詞擴充方法,註冊 Azure 服務用戶端。 - 將的
DefaultAzureCredential
的執行個體傳遞至UseCredential
方法。
例如:
using Microsoft.Extensions.Azure;
using Azure.Identity;
builder.Services.AddAzureClients(clientBuilder =>
{
clientBuilder.AddBlobServiceClient(
new Uri("https://<account-name>.blob.core.windows.net"));
clientBuilder.UseCredential(new DefaultAzureCredential());
});
UseCredential
的替代方法是直接具現化 DefaultAzureCredential
:
using Azure.Identity;
builder.Services.AddSingleton<BlobServiceClient>(_ =>
new BlobServiceClient(
new Uri("https://<account-name>.blob.core.windows.net"),
new DefaultAzureCredential()));
在本機開發工作站上執行上述程式碼時,便會在環境變數中尋找應用程式服務主體,或在本機安裝的開發工具 (例如 Visual Studio) 中尋找一組開發人員認證。 在本機開發期間,您可以使用任一方法以向 Azure 資源驗證應用程式。
部署至 Azure 時,這同一組程式碼也可向其他 Azure 資源驗證您的應用程式。 DefaultAzureCredential
可擷取環境設定與受控識別設定,以便自動向其他服務進行驗證。