我收到错误为“失败:AttributeError:'ServicePrincipalCredentials'对象没有属性'get_token”

问题描述

在运行 Chaos Toolkit Azure 相关 Playbook 时,我收到错误消息“失败:AttributeError:'ServicePrincipalCredentials' 对象没有属性 'get_token”,尽管我已经传入了正确的 Secret ID、租户 ID、客户端 ID、订阅 ID和客户端机密 ID.. 甚至订阅对服务主体具有完全权限。

解决方法

简短回答:检查您尝试运行的确切代码会有所帮助,但是从提到的错误来看,您似乎正在尝试在较旧的库中使用较新的库方法。使用基于 azure.core 的较新 SDK 库时,请使用 ClientSecretCredential 库中的 azure.identity 对象。使用旧版 SDK 库时,请使用 ServicePrincipalCredentials 库中的 azure.common

长答案: 适用于 Python 的 Azure 库目前正在更新,以共享常见的云模式,例如身份验证协议、日志记录、跟踪、传输协议、缓冲响应和重试。

在较新版本中,身份验证机制已重新设计并替换为 azure-identity 库,以便为所有 Azure SDK 提供基于 Azure Identity 的统一身份验证。运行 pip install azure-identity 以获取包。

因此,不要使用 ServicePrincipalCredentials 库中的 azure.common 类,而是改为使用 ClientSecretCredential,如下所示:

from azure.identity import ClientSecretCredential
from azure.mgmt.compute import ComputeManagementClient

credential = ClientSecretCredential(
    tenant_id='xxxxx',client_id='xxxxx',client_secret='xxxxx'
)

这是另一个具有详细解决方案的相关主题:Azure Python SDK: 'ServicePrincipalCredentials' object has no attribute 'get_token'

其他参考: