Azure身份验证仍调用旧租户ID,切换新账户遇授权错误求助
切换Azure账户后DefaultCredentials仍使用旧租户ID的解决方法
问题背景
- 此前使用旧Microsoft账户访问Azure,完成身份验证并创建配置了Entra应用
- 近期用新邮箱注册了Azure账户,创建并配置了新的Entra应用,需完全切换至该新账户
- Python应用中使用Azure SDK的
DefaultCredentials(),已设置新账户对应的环境变量:AZURE_TENANT_IDAZURE_CLIENT_IDAZURE_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
相关产品推荐
相关产品推荐

