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

使用MSAL结合托管身份获取Dynamics 365访问令牌遇问题求示例

Python 用托管身份获取Dynamics 365访问令牌(基于azure-identity/MSAL)

MSAL对托管身份的支持说明

MSAL Python本身没有内置ManagedIdentityCredential,这个类是azure-identity库的组件。如果要实现托管身份免密钥获取令牌,推荐用azure-identity的凭据类,它可以直接获取目标资源的令牌,也能和MSAL配合使用。

正确代码示例

以下是使用azure-identity获取Dynamics 365令牌的完整代码:

from azure.identity import ManagedIdentityCredential

def fetch_dynamics_token(environment_url, managed_identity_client_id=None):
    # 构造Dynamics 365的权限范围
    scope = f"{environment_url}/.default"
    # 初始化托管身份凭据:用户分配的托管身份需传client_id,系统分配的留空即可
    credential = ManagedIdentityCredential(client_id=managed_identity_client_id)
    # 获取访问令牌
    token = credential.get_token(scope)
    print(f"成功获取令牌: {token.token[:50]}...")
    return token

if __name__ == "__main__":
    # 替换为你的Dynamics环境域名前缀
    env_prefix = "your-crm-env"
    dynamics_url = f"https://{env_prefix}.crm.dynamics.com"
    # 用户分配托管身份的client_id(系统分配则无需传入此参数)
    mi_client_id = "your-managed-identity-client-id"
    
    fetch_dynamics_token(dynamics_url, mi_client_id)

你代码里的问题

  1. 库依赖错配:你导入了MSAL却用了ManagedIdentityCredential,这个类属于azure-identity,得先安装这个包:pip install azure-identity。
  2. Authority参数无效:托管身份不需要手动构造复杂的authority URL,ManagedIdentityCredential会自动识别身份验证端点,不用传这个参数。
  3. 变量未定义:代码里的environment、graph_authority都没赋值,运行肯定报错。
  4. 参数传递错误:函数调用时传了graph_authority,但函数定义的参数是authority,而且这个参数根本不需要传。

关键注意事项

  • 系统分配的托管身份:初始化ManagedIdentityCredential时不用传client_id;用户分配的必须传。
  • 必须给托管身份配置Dynamics 365的应用权限(比如Dynamics 365 Customer Service的权限),否则拿不到有效令牌。
  • 代码要跑在支持托管身份的Azure环境里(VM、App Service、Function App等),本地测试可以用Azure CLI登录模拟:az login之后再运行代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 00:42:38