启用MFA后Python获取Dynamics 365令牌遇AADSTS50076错误
无需客户端密钥获取Dynamics 365 Marketing访问令牌(适配MFA)
核心方案:用MSAL交互式认证替代已弃用的ADAL
ADAL库已被微软弃用,且用户名密码流无法支持MFA。你可以使用**MSAL(Microsoft Authentication Library)**的公共客户端交互式认证流程——该流程不需要客户端密钥,通过用户手动完成MFA验证(设备批准/验证码)即可获取令牌。
步骤1:安装MSAL库
pip install msal
步骤2:编写认证代码
import msal # 配置参数 CLIENT_ID = "你的原client_id" # 沿用你之前使用的客户端ID,需为公共客户端类型 AUTHORITY = "https://login.microsoftonline.com/common" SCOPE = ["https://xxxx.xxx.dynamics.com/.default"] # 替换为你的Dynamics实例URL # 初始化公共客户端应用 app = msal.PublicClientApplication(CLIENT_ID, authority=AUTHORITY) # 触发交互式登录(自动弹出浏览器完成MFA验证) result = app.acquire_token_interactive(scopes=SCOPE) # 获取访问令牌 if "access_token" in result: access_token = result["access_token"] print("令牌获取成功:", access_token) else: print("认证失败:", result.get("error_description"))
关键说明
- 公共客户端应用要求:你现有client_id对应的应用需配置为「公共客户端」类型;若之前是机密客户端,你可以自己在Azure AD注册一个新的公共客户端应用(普通用户权限即可完成注册)。
- 交互式验证流程:运行代码后会自动弹出浏览器,引导你完成公司账户登录及MFA验证(设备批准/输入验证码),验证完成后令牌会自动返回给代码。
- 令牌自动缓存:MSAL会自动缓存令牌,后续运行代码可直接调用缓存,无需重复验证(除非令牌过期或缓存失效)。
常见问题处理
- 若浏览器提示「应用未授权」:确认你的client_id对应的应用已被允许访问Dynamics 365 Marketing,或联系IT团队将该应用添加到允许列表(无需客户端密钥,仅需确认应用权限)。
- 若无法注册新应用:检查Azure AD的用户应用注册权限,默认普通用户可注册应用,若被限制需联系IT团队开通基础的应用注册权限。
内容的提问来源于stack exchange,提问作者samronaldo309
相关产品推荐
相关产品推荐

