Azure:DefaultAzureCredential认证失败,请求解决方法
问题:Azure Storage使用DefaultAzureCredential认证失败(CLI令牌获取失败)
问题场景
- 使用Azure Storage,通过
DefaultAzureCredential进行身份验证 - 已执行
az login完成登录,但运行Azure函数时收到权限不匹配错误
错误响应
{ "message": "{\"odata.error\":{\"code\":\"AuthorizationPermissionMismatch\",\"message\":{\"lang\":\"en-US\",\"value\":\"This request is not authorized to perform this operation using this permission.\nRequestId:1fedb6ef-3002-0070-7133-fc1d53000000\nTime:2023-10-11T11:09:48.2823331Z\"}}}" }
测试代码及输出
执行以下代码:
const credential = new DefaultAzureCredential(); console.log(credential)
得到输出:
DefaultAzureCredential { [2023-10-11T11:17:18.644Z] UnavailableMessage: 'DefaultAzureCredential => failed to retrieve a token from the included credentials. To troubleshoot, visit [https://aka.ms/azsdk/js/identity/defaultazurecredential/troubleshoot.'](https://aka.ms/azsdk/js/identity/defaultazurecredential/troubleshoot.%27), [2023-10-11T11:17:18.645Z] _sources: [
核心疑问
无法通过CLI获取令牌,尝试单独使用AzureCliCredential同样无效,如何解决该问题?
设备信息
- MacBook Air M1 2020
- 操作系统:Ventura 13.3
解决步骤
1. 确认CLI登录上下文正确性
- 执行
az account show,检查当前登录的订阅、租户是否与目标Azure Storage资源所属一致 - 若不一致,用
az account set --subscription <订阅ID>切换到正确订阅 - 执行
az login --tenant <租户ID>,确保登录到资源所在的租户
2. 验证令牌权限有效性
- 执行
az account get-access-token --resource https://storage.azure.com,获取Storage专属访问令牌 - 解码令牌检查权限字段(如
roles或scp),确认是否包含Storage操作所需权限(如StorageBlobContributor、StorageAccountContributor) - 若权限不足,给当前登录用户/服务主体分配对应Storage RBAC角色
3. 排查Mac M1环境下CLI适配问题
- 执行
az --version检查CLI版本,确保使用最新arm64原生版本(避免x86模拟版的兼容性问题) - 执行
az cache purge清除CLI本地缓存,再重新执行az login - 检查环境变量:确认未设置
AZURE_CLIENT_ID、AZURE_TENANT_ID等会覆盖CLI凭证的变量(这类变量会让DefaultAzureCredential优先选择其他凭证源)
4. 本地Azure函数的特殊配置
- 检查函数项目的
local.settings.json,确保未设置AzureWebJobsStorage连接字符串或其他身份验证相关环境变量,避免与DefaultAzureCredential冲突 - 本地运行时可显式指定
AzureCliCredential并绑定租户ID:
const { AzureCliCredential } = require("@azure/identity"); const credential = new AzureCliCredential({ tenantId: "<你的租户ID>" });
5. 检查权限边界与访问策略
- 确认当前用户的RBAC角色直接关联到目标Storage资源(而非仅订阅/资源组级别的宽泛权限)
- 排查是否有条件访问策略限制了该用户从当前设备获取令牌
内容的提问来源于stack exchange,提问作者Obaid Aqeel
相关产品推荐
相关产品推荐

