當應用程序需要訪問 Azure 資源(如 Azure 存儲、Azure 密鑰保管庫 或 Azure 認知服務)時,必須向 Azure 進行身份驗證。 對於所有應用程序(無論是部署到 Azure、在本地部署還是在本地開發人員工作站上進行開發)而言,這一要求都是如此。 本文介紹使用 Azure SDK for Python 時向 Azure 驗證應用的建議方法。
對 Azure 資源進行身份驗證時,請使用基於令牌的身份驗證,而不是應用的連接字符串。 用於 Python 的 Azure SDK 提供支持基於令牌的身份驗證的類。 無論應用是在本地開發中、部署到 Azure 還是部署到本地服務器,應用都可以無縫地向 Azure 資源進行身份驗證。
應用用來向 Azure 資源進行身份驗證的特定類型的基於令牌的身份驗證取決於應用正在運行的位置。 下圖顯示了基於令牌的身份驗證類型。
Azure SDK 提供的 DefaultAzureCredential 類允許應用使用不同的身份驗證方法,具體取決於它們運行的環境。 這樣,應用就可以從本地開發升級到測試環境,而無需更改代碼。
為每個環境配置適當的身份驗證方法,並 DefaultAzureCredential
自動檢測和使用該身份驗證方法。 首選使用 DefaultAzureCredential
手動編碼條件邏輯或功能標志,以在不同的環境中使用不同的身份驗證方法。
有關 DefaultAzureCredential
使用該類的詳細信息,請參閱 應用程序中使用 DefaultAzureCredential 部分。
生成適用於 Azure 的應用時,請使用基於令牌的身份驗證,而不是使用連接字符串。 基於令牌的身份驗證在使用連接字符串進行身份驗證方面具有以下優勢:
將連接字符串的使用限制為無法訪問生產或敏感數據的初始概念證明應用或開發原型。 否則,在對 Azure 資源進行身份驗證時,Azure SDK 中提供的基於令牌的身份驗證類始終是首選的。
在服務器環境中托管時,每個應用程序都會為每個運行應用程序的環境分配一個唯一 的應用程序標識 。 在 Azure 中,應用標識由 服務主體表示。 此特殊類型的安全主體可標識應用並將其身份驗證到 Azure。 要用於應用的服務主體類型取決於應用正在運行的位置:
了解來自 Azure 托管應用的身份驗證
托管在 Azure 外部的應用AZURE_CLIENT_ID
一點 AZURE_TENANT_ID
,並且 AZURE_CLIENT_SECRET
全部存儲為環境變量,供應用程序在運行時讀取,並允許應用使用應用程序服務主體向 Azure 進行身份驗證。了解 Azure 外部托管的應用的身份驗證
當應用程序在本地開發期間在開發人員工作站上運行時,它仍必須向應用使用的任何 Azure 服務進行身份驗證。 在本地開發期間,有兩個主要策略用於向 Azure 進行身份驗證:
了解來自 Azure 托管應用的身份驗證
在本地開發期間使用開發人員的憑據向 Azure 驗證應用。在此方法中,開發人員必須從 Azure 工具擴展登錄到 Azure,以便Visual Studio Code、Azure CLI 或本地工作站上的Azure PowerShell。 然後,應用程序可以從憑據存儲訪問開發人員的憑據,並使用這些憑據從應用訪問 Azure 資源。了解來自 Azure 托管應用的身份驗證
若要在 Python 應用中使用 DefaultAzureCredential ,請將 azure.identity 包添加到應用程序。
terminal復制
pip install azure-identity
下面的代碼示例演示如何實例化 DefaultAzureCredential
對象並將其與 Azure SDK 客戶端類一起使用。 在這種情況下,它是BlobServiceClient
用於訪問Azure Blob 存儲的對象。
Python復制
from azure.identity import DefaultAzureCredential
from azure.storage.blob import BlobServiceClient
# Acquire a credential object
credential = DefaultAzureCredential()
blob_service_client = BlobServiceClient(
account_url="https://<my_account_name>.blob.core.windows.net",
credential=credential)
該 DefaultAzureCredential
對象會自動檢測為應用配置的身份驗證機制,並獲取對應用進行身份驗證所需的令牌。 如果應用程序使用多個 SDK 客戶端,則可以將同一憑據對象與每個 SDK 客戶端對象一起使用。
在內部, DefaultAzureCredential
實現一系列憑據提供程序,以便將應用程序進行身份驗證到 Azure 資源。 每個憑據提供程序都可以檢測是否為應用配置了該類型的憑據。 該 DefaultAzureCredential
對象按順序檢查每個提供程序,並使用配置了憑據的第一個提供程序中的憑據。
下圖和表中顯示了查找憑據的順序 DefaultAzureCredential
:
DefaultAzureCredential
對象讀取一組環境變量,以確定應用程序服務主體 (應用程序用戶) 是否已為應用設置。 如果是這樣, DefaultAzureCredential
請使用這些值向 Azure 對應用進行身份驗證。DefaultAzureCredential
請使用該托管標識向 Azure 進行身份驗證。 有關使用托管標識的身份驗證,請參閱 服務器環境中的身份驗證部分。DefaultAzureCredential
請使用同一帳戶向 Azure 驗證應用。Azure CLI如果使用 Azure CLI 中的命令向 Azure az login
進行身份驗證, DefaultAzureCredential
請使用同一帳戶向 Azure 驗證應用。Azure PowerShell如果已使用 Azure PowerShell 中的 Connect-AzAccount
cmdlet 向 Azure 進行身份驗證,DefaultAzureCredential
請使用同一帳戶向 Azure 驗證應用。交互如果已啟用, DefaultAzureCredential
則通過當前系統的默認浏覽器以交互方式對你進行身份驗證。 默認情況下禁用選項。