使用DefaultAzureCredential获取令牌出现AADSTS100009错误如何解决
错误产生原因
AADSTS100009错误的核心触发逻辑是Azure AD区域缓存认证服务不支持需要返回加密令牌的认证流请求,对应你的场景具体触发条件通常为以下两种:
- 你手动开启了DefaultAzureCredential的区域认证能力:要么在Azure Function配置中添加了
AZURE_REGIONAL_AUTHORITY_NAME环境变量,要么在代码初始化凭证时显式指定了区域权威机构参数,而你请求令牌的目标服务要求Azure AD返回加密的访问令牌,区域缓存服务目前不支持这类请求 - 你使用的Azure.Identity库版本过低:1.9.0之前的版本会在Azure Function运行环境中默认自动开启区域认证,没有兼容加密令牌场景的冲突
解决方案
以下方案任选其一即可解决问题:
- 手动关闭区域认证
可选择任意一种操作方式:- 进入Azure Function的配置页,删除
AZURE_REGIONAL_AUTHORITY_NAME环境变量 - 代码初始化DefaultAzureCredential时显式禁用区域认证,代码示例:
var credential = new DefaultAzureCredential(new DefaultAzureCredentialOptions { ExcludeRegionalAuthority = true }); - 进入Azure Function的配置页,删除
- 升级Azure.Identity NuGet包
将项目中的Azure.Identity包升级到1.9.0及以上的稳定版本,该版本之后微软调整了默认逻辑,不会在冲突场景下自动开启区域认证 - 更换托管标识专用凭证类
如果你确认该函数仅会在Azure托管环境运行,仅需要使用系统托管标识认证,可以直接使用ManagedIdentityCredential类替代DefaultAzureCredential,该类默认不会启用区域认证逻辑,代码示例:var credential = new ManagedIdentityCredential();
内容的提问来源于stack exchange,提问作者qvt
相关产品推荐
相关产品推荐

