AzureDefaultCredentials认证失败:Authorization Code为None的排查求助
排查Azure Python SDK认证失败问题
背景情况
- 本地VS Code已通过
az login完成登录,代码里试过DefaultAzureCredential()和AzureCliCredential()两种认证方式,结果都触发相同的认证错误 - 把代码放到Azure Cloud Shell运行,同样报错
- 自己排查时发现,执行
az role assignment list --assignee <username>返回空数组[],虽然在Azure门户里觉得自己有操作权限
用到的代码
aad_credentials = DefaultAzureCredential() URI = environ.get("DPS_ENDPOINT") client = DeviceProvisioningClient(endpoint=URI, credential=aad_credentials) group_id = 'symetric_group_test' enrollment_group = { "enrollmentGroupId": group_id, "attestation": { "type": "symmetricKey" } } client.enrollment_group.create_or_update(id=group_id, enrollment_group=enrollment_group)
(注:原代码最后一行缺少闭合括号,已补充)
收到的错误信息
azure.core.exceptions.ClientAuthenticationError: (None) Authorization failed for the request
Code: None
Message: Authorization failed for the request
已做的尝试
- 给客户端添加
logging_enable=True参数,但没有输出任何日志信息 - 替换成
AzureCliCredential()单独使用,结果和DefaultAzureCredential()完全一致
排查提示与方向
- 先确认真实的角色分配:
az role assignment list --assignee <username>返回空,说明当前登录账号确实没有被分配任何RBAC角色,门户显示的权限可能是视觉误导或者权限范围不对。可以试试az role assignment list --all --assignee <username>查看所有订阅下的角色分配,或者用az account show确认当前操作的订阅,再检查该订阅内的角色配置。 - 验证DPS资源的权限范围:要确保你的账号在目标DPS资源、它所在的资源组或者订阅层级,被分配了
IoT Device Provisioning Service Contributor这类有操作权限的角色,光有门户的查看权限没用。 - 直接测试访问令牌:运行
az account get-access-token --resource https://azure-devices-provisioning.net拿到DPS的访问令牌,用这个令牌直接调用DPS的API,看看能不能正常操作,排除SDK本身的认证逻辑问题。 - 检查环境变量和端点:确认
DPS_ENDPOINT的值是正确的,格式应该是{你的DPS名称}.azure-devices-provisioning.net,端点错了也会导致权限验证失败。 - 强制开启详细日志:除了
logging_enable=True,可以手动加日志配置代码,开启DEBUG级别的日志,看看认证过程里的细节:
import logging logging.basicConfig(level=logging.DEBUG)
内容的提问来源于stack exchange,提问作者MikeF
相关产品推荐
相关产品推荐

