Azure应用间MSAL获取Token报错:凭证不正确求助
尝试使用MSAL通过代码实现应用间(无用户参与)的令牌获取,返回错误:
{'error': {'code': 'Unauthorized', 'message': 'The credentials provided are incorrect'}}但通过Postman调用
https://login.microsoftonline.com/{TENANT_ID}/oauth2/v2.0/token接口可正常获取令牌,相关代码如下:CLIENT_ID = 'ci' CLIENT_SECRET = 'cs' TENANT_ID = 'tid' AUTHORITY = f'https://login.microsoftonline.com/{TENANT_ID}' SCOPE = ['https://graph.microsoft.com/.default'] REDIRECT_URI = 'http://localhost:5000/callback' app_confidential_client.acquire_token_for_client(scopes=SCOPE)
排查步骤
检查机密客户端实例初始化
确认app_confidential_client的初始化逻辑是否正确传入所有必要参数,正确的初始化示例:from msal import ConfidentialClientApplication app_confidential_client = ConfidentialClientApplication( client_id=CLIENT_ID, client_credential=CLIENT_SECRET, authority=AUTHORITY )注:应用间令牌获取不需要
REDIRECT_URI,可移除该变量避免混淆。验证凭证完全匹配
逐行对比代码与Postman中使用的client_id、client_secret、tenant_id:- 确保无多余空格、换行符或拼写错误
- 确认
client_secret是应用注册中有效的客户端密码(非证书)且未过期 - 租户ID需为正确的GUID或域名格式
核对权限配置
确认代码中scope与Postman一致,且应用注册中已添加对应应用权限并完成管理员同意(应用间模式必须由管理员授予权限)。排查环境与请求差异
- 检查代码运行环境是否能正常访问
login.microsoftonline.com,排除代理、防火墙拦截 - 开启MSAL日志查看请求细节,对比与Postman的请求参数是否一致:
import logging logging.basicConfig(level=logging.DEBUG)
- 检查代码运行环境是否能正常访问
检查应用注册设置
确认应用注册为机密客户端(已配置客户端密码/证书),同时验证"身份验证"设置中未误禁用必要选项。
内容的提问来源于stack exchange,提问作者Joan
相关产品推荐
相关产品推荐

