You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure身份验证仍调用旧租户ID,切换新账户遇授权错误求助

切换Azure账户后DefaultCredentials仍使用旧租户ID的解决方法

问题背景

  • 此前使用旧Microsoft账户访问Azure,完成身份验证并创建配置了Entra应用
  • 近期用新邮箱注册了Azure账户,创建并配置了新的Entra应用,需完全切换至该新账户
  • Python应用中使用Azure SDK的DefaultCredentials(),已设置新账户对应的环境变量:
    • AZURE_TENANT_ID
    • AZURE_CLIENT_ID
    • AZURE_CLIENT_SECRET
  • 旧账户凭据可正常上传Blob至存储账户,但切换环境变量后,Azure仍尝试使用旧租户ID,触发如下授权错误:

azure.core.exceptions.ClientAuthenticationError: The current credential is not configured to acquire tokens for tenant {my_old_tenant_id}. To enable acquiring tokens for this tenant add it to the additionally_allowed_tenants when creating the credential, or add "*" to additionally_allowed_tenants to allow acquiring tokens for any tenant.

已尝试的操作

  • 彻底删除代码中所有旧租户ID的引用
  • 删除本地~/.azure文件夹
  • 在代码中硬编码新租户ID

可行解决方案

1. 显式指定租户ID创建DefaultAzureCredential

不要使用无参的DefaultAzureCredential(),显式传入新租户ID并配置允许所有租户(避免残留缓存干扰):

from azure.identity import DefaultAzureCredential

credential = DefaultAzureCredential(
    tenant_id="你的新租户ID",
    additionally_allowed_tenants=["*"]
)

2. 确保环境变量完全生效

  • 重启运行Python应用的终端或进程,新环境变量需要重启后才能被加载
  • 可以在代码中添加打印语句验证当前环境变量:
    import os
    print("当前AZURE_TENANT_ID:", os.getenv("AZURE_TENANT_ID"))
    print("当前AZURE_CLIENT_ID:", os.getenv("AZURE_CLIENT_ID"))
    

3. 清理系统级凭据缓存

  • Windows:打开「凭据管理器」,搜索并删除所有与Azure相关的旧凭据条目
  • macOS:打开「钥匙串访问」,删除Azure相关的旧密钥条目
  • Linux:除了~/.azure文件夹,还需检查/var/lib/secret-service(GNOME密钥环)下的相关缓存并清理

4. 直接使用ClientSecretCredential(更可控)

如果DefaultCredential仍存在自动检测旧凭据的问题,直接使用新账户的客户端凭据创建实例,跳过自动检测逻辑:

from azure.identity import ClientSecretCredential

credential = ClientSecretCredential(
    tenant_id="你的新租户ID",
    client_id="你的新客户端ID",
    client_secret="你的新客户端密钥"
)

内容的提问来源于stack exchange,提问作者vishal panchal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 09:36:07