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

使用Python MSAL库获取Microsoft Graph API访问令牌失败求助

问题分析与修复方案

核心代码错误

你的代码存在致命逻辑判断错误,这是导致令牌获取失败(即使实际获取成功也会触发异常)的直接原因:

if "access_token" is result:

is用于比较对象身份,这里"access_token"是字符串,result是返回的字典对象,两者永远不可能相等。正确的写法是用in判断字典中是否存在该键:

if "access_token" in result:

冗余代码优化

acquire_token_silent是针对用户上下文的静默刷新令牌方法,而你使用的是客户端凭据流(Client Credentials Flow),该流无需关联用户账户,因此这个调用完全多余,直接调用acquire_token_for_client即可。

修复后的完整代码

from flask import Flask, jsonify, request, send_file
from flask_cors import CORS
import logging
from msal import ConfidentialClientApplication

app = Flask(__name__)
CORS(app)

client_id="你的客户端ID"
client_secret="你的客户端密钥"
tenant_id="你的租户ID"

msal_authority = f"https://login.microsoftonline.com/{tenant_id}"
scopes = ['https://graph.microsoft.com/.default']

msal_app = ConfidentialClientApplication(
    client_id=client_id,
    client_credential=client_secret,
    authority=msal_authority)

# 客户端凭据流直接获取令牌
result = msal_app.acquire_token_for_client(scopes=scopes)

if "access_token" in result:
    access_token = result['access_token']
    print("access token ==================> ", access_token)
else:
    # 打印错误详情便于排查
    error_msg = result.get('error_description', result.get('error', '未知错误'))
    print(f"令牌获取失败: {error_msg}")
    raise Exception(f"无法获取访问令牌: {error_msg}")

额外排查点

从你提供的应用注册和API权限截图来看:

  • 已正确添加Microsoft Graph的应用权限且完成管理员同意,符合客户端凭据流的权限要求。
  • 若修复后仍失败,建议检查:
    • 客户端密钥是否有效(未过期、与应用注册生成的密钥完全一致)
    • 租户ID是否为正确的GUID或租户域名格式
    • 网络环境是否能正常访问https://login.microsoftonline.com和https://graph.microsoft.com

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 01:00:01