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

Python中通过密钥名称获取Azure密钥值时遇错误求助

问题排查:Azure密钥值获取时的AttributeError与RuntimeWarning

错误信息

AttributeError: 'coroutine' object has no attribute 'token'
sys:1: RuntimeWarning: coroutine 'AzureCliCredential.get_token' was never awaited

问题原因

你混用了异步身份认证组件和同步密钥客户端:

  • 从azure.identity.aio导入的AzureCliCredential是异步实现,其get_token方法返回协程对象(coroutine)
  • 而azure.keyvault.secrets.SecretClient是同步客户端,它会直接尝试访问get_token返回值的token属性,但协程对象没有这个属性;同时因为未使用await调用异步方法,触发了RuntimeWarning

解决方案

方案1:使用异步SecretClient(推荐)

将同步的SecretClient替换为异步版本,保持整个调用链的异步一致性:

修改secrets.py:

from azure.identity.aio import AzureCliCredential
# 导入异步版SecretClient
from azure.keyvault.secrets.aio import SecretClient

KVUri = f"https://{keyVaultName}.vault.azure.net"

credential = AzureCliCredential()
# 使用异步SecretClient实例化
secret_client = SecretClient(vault_url=KVUri, credential=credential)    

async def get_secret(name: str):
    secret = await secret_client.get_secret(name)
    return secret.value

main.py代码无需修改,保持原有异步调用逻辑即可。

方案2:改用同步AzureCliCredential

如果不需要异步逻辑,可以切换为同步身份认证组件,配合同步SecretClient:

修改secrets.py:

# 导入同步版AzureCliCredential
from azure.identity import AzureCliCredential
from azure.keyvault.secrets import SecretClient

KVUri = f"https://{keyVaultName}.vault.azure.net"

credential = AzureCliCredential()
secret_client = SecretClient(vault_url=KVUri, credential=credential)    

# 改为同步函数
def get_secret(name: str):
    secret = secret_client.get_secret(name)
    return secret.value

对应调整main.py的调用逻辑:

def print_hi(name):
    print(f'Hi, {name}')
    secret_value = secrets.get_secret("order-cat-appinsights-instrumentation-key")
    print(f"Secret value is {secret_value}")

if __name__ == '__main__':
    print_hi('PyCharm')

验证

两种方案均可解决上述错误,运行代码后能正常从Azure密钥保管库获取密钥值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 02:42:19