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

Azure应用间MSAL获取Token报错:凭证不正确求助

MSAL应用间令牌获取报错Unauthorized排查方案

尝试使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 22:45:57