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

使用Azure Python SDK无法获取Azure订阅的问题求助

问题根源

你混用了异步版的凭证(azure.identity.aio.ClientSecretCredential)和同步版的客户端(azure.mgmt.resource.SubscriptionClient)。同步客户端的认证逻辑会直接调用凭证的get_token方法,但异步版凭证的get_token返回的是协程对象(需要await才能拿到token),同步逻辑无法处理这种异步返回值,因此抛出AttributeError和未await的警告。

解决方法

方法一:使用同步版凭证(适配现有同步代码)

直接替换异步凭证为同步版,不需要修改其他代码逻辑:

from azure.identity import ClientSecretCredential  # 替换为同步版凭证
from azure.mgmt.resource import SubscriptionClient
import json

data = json.load(open("parameters.json"))

credential = ClientSecretCredential(
    tenant_id=data["tenant"],
    client_id=data["client_id"],
    client_secret=data["client_secret"],
)

subs = SubscriptionClient(credential=credential)
l = list(subs.subscriptions.list())
print(l)

方法二:改用异步版客户端(适合异步流程)

如果需要保留异步凭证,必须搭配异步版的SubscriptionClient,并基于asyncio运行整个流程:

from azure.identity.aio import ClientSecretCredential
from azure.mgmt.resource.aio import SubscriptionClient  # 异步版客户端
import json
import asyncio

async def fetch_subscriptions():
    data = json.load(open("parameters.json"))
    credential = ClientSecretCredential(
        tenant_id=data["tenant"],
        client_id=data["client_id"],
        client_secret=data["client_secret"],
    )
    # 使用async with管理客户端生命周期
    async with SubscriptionClient(credential=credential) as client:
        subscriptions = []
        async for sub in client.subscriptions.list():
            subscriptions.append(sub)
        print(subscriptions)
    await credential.close()

asyncio.run(fetch_subscriptions())
关于Azure CLI的疑问

Azure CLI内部使用的是同步版凭证,且CLI的执行框架已经封装了同步/异步的兼容逻辑,因此可以正常使用SubscriptionClient。它的实现和你直接混用异步凭证+同步客户端的场景完全不同。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 19:47:23