OA0 = Omni AI 0
OA0 是一个探索 AI 的论坛
现在注册
已注册用户请  登录
OA0  ›  技能包  ›  azure-identity-py:用于 Python 身份验证的 Azure Identity SDK

azure-identity-py:用于 Python 身份验证的 Azure Identity SDK

 
  library ·  2026-02-14 22:34:53 · 3 次点击  · 0 条评论  

名称: azure-identity-py
描述: |
Azure Identity SDK for Python 身份验证库。适用于 DefaultAzureCredential、托管标识、服务主体和令牌缓存。
触发词:"azure-identity"、"DefaultAzureCredential"、"authentication"、"managed identity"、"service principal"、"credential"。
package: azure-identity


Azure Identity SDK for Python

用于 Azure SDK 客户端的身份验证库,基于 Microsoft Entra ID(原 Azure AD)。

安装

pip install azure-identity

环境变量

# 服务主体(用于生产环境/CI)
AZURE_TENANT_ID=<你的租户ID>
AZURE_CLIENT_ID=<你的客户端ID>
AZURE_CLIENT_SECRET=<你的客户端密钥>

# 用户分配的托管标识(可选)
AZURE_CLIENT_ID=<托管标识客户端ID>

DefaultAzureCredential

推荐在大多数场景下使用的凭据。它会按顺序尝试多种身份验证方法:

from azure.identity import DefaultAzureCredential
from azure.storage.blob import BlobServiceClient

# 在本地开发和环境中均可工作,无需修改代码
credential = DefaultAzureCredential()

client = BlobServiceClient(
    account_url="https://<账户>.blob.core.windows.net",
    credential=credential
)

凭据链顺序

顺序 凭据 适用环境
1 EnvironmentCredential CI/CD、容器
2 WorkloadIdentityCredential Kubernetes
3 ManagedIdentityCredential Azure VM、应用服务、函数
4 SharedTokenCacheCredential 仅限 Windows
5 VisualStudioCodeCredential 安装了 Azure 扩展的 VS Code
6 AzureCliCredential az login
7 AzurePowerShellCredential Connect-AzAccount
8 AzureDeveloperCliCredential azd auth login

自定义 DefaultAzureCredential

# 排除不需要的凭据
credential = DefaultAzureCredential(
    exclude_environment_credential=True,
    exclude_shared_token_cache_credential=True,
    managed_identity_client_id="<用户分配的托管标识客户端ID>"  # 用于用户分配的托管标识
)

# 启用交互式浏览器(默认禁用)
credential = DefaultAzureCredential(
    exclude_interactive_browser_credential=False
)

特定凭据类型

ManagedIdentityCredential

适用于 Azure 托管的资源(VM、应用服务、函数、AKS):

from azure.identity import ManagedIdentityCredential

# 系统分配的托管标识
credential = ManagedIdentityCredential()

# 用户分配的托管标识
credential = ManagedIdentityCredential(
    client_id="<用户分配的托管标识客户端ID>"
)

ClientSecretCredential

适用于使用密钥的服务主体:

from azure.identity import ClientSecretCredential

credential = ClientSecretCredential(
    tenant_id=os.environ["AZURE_TENANT_ID"],
    client_id=os.environ["AZURE_CLIENT_ID"],
    client_secret=os.environ["AZURE_CLIENT_SECRET"]
)

AzureCliCredential

使用 az login 登录的账户:

from azure.identity import AzureCliCredential

credential = AzureCliCredential()

ChainedTokenCredential

自定义凭据链:

from azure.identity import (
    ChainedTokenCredential,
    ManagedIdentityCredential,
    AzureCliCredential
)

# 先尝试托管标识,失败则回退到 CLI
credential = ChainedTokenCredential(
    ManagedIdentityCredential(client_id="<用户分配的托管标识客户端ID>"),
    AzureCliCredential()
)

凭据类型表

凭据 使用场景 身份验证方式
DefaultAzureCredential 大多数场景 自动检测
ManagedIdentityCredential Azure 托管的应用程序 托管标识
ClientSecretCredential 服务主体 客户端密钥
ClientCertificateCredential 服务主体 证书
AzureCliCredential 本地开发 Azure CLI
AzureDeveloperCliCredential 本地开发 Azure Developer CLI
InteractiveBrowserCredential 用户登录 浏览器 OAuth
DeviceCodeCredential 无头/SSH 环境 设备代码流

直接获取令牌

from azure.identity import DefaultAzureCredential

credential = DefaultAzureCredential()

# 获取特定作用域的令牌
token = credential.get_token("https://management.azure.com/.default")
print(f"令牌过期时间: {token.expires_on}")

# 用于 Azure Database for PostgreSQL
token = credential.get_token("https://ossrdbms-aad.database.windows.net/.default")

异步客户端

from azure.identity.aio import DefaultAzureCredential
from azure.storage.blob.aio import BlobServiceClient

async def main():
    credential = DefaultAzureCredential()

    async with BlobServiceClient(
        account_url="https://<账户>.blob.core.windows.net",
        credential=credential
    ) as client:
        # ... 异步操作
        pass

    await credential.close()

最佳实践

  1. 使用 DefaultAzureCredential 适用于本地和 Azure 环境中运行的代码
  2. 切勿硬编码凭据 — 使用环境变量或托管标识
  3. 在生产部署中优先使用托管标识
  4. 需要自定义凭据顺序时使用 ChainedTokenCredential
  5. 显式关闭异步凭据或使用上下文管理器
  6. 为用户分配的托管标识设置 AZURE_CLIENT_ID
  7. 排除未使用的凭据以加速身份验证过程
3 次点击  ∙  0 人收藏  
登录后收藏  
目前尚无回复
0 条回复
About   ·   Help   ·    
OA0 - Omni AI 0 一个探索 AI 的社区
沪ICP备2024103595号-2
Developed with Cursor