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

使用Python Flask调用Microsoft Graph API获取组织用户详情时遭遇403 Access Denied错误的解决建议求助

解决Python Flask调用Microsoft Graph API时的Access Denied问题

我帮你分析下这个问题,大概率是几个常见的细节没处理好,你可以按下面的步骤逐一排查:

1. 修复Authorization请求头的格式

这是最容易踩的坑!你直接访问Graph URL时,浏览器可能自动补全了Bearer前缀,但代码里的Authorization头直接用了access_token——正确的格式必须是Bearer {你的access_token}。

修改后的代码示例:

def get_user_details_(access_token: str):
    url = "https://graph.microsoft.com/v1.0/me"
    headers = {
        'Content-Type': "application/json",
        # 重点:必须加上Bearer前缀
        'Authorization': f'Bearer {access_token}' 
    }
    # 建议移除verify=False(生产环境绝对不能禁用SSL验证)
    response = requests.get(url, headers=headers)
    print("response **** ", response.text)
    response = response.json() if response.status_code == 200 else {}
    return response

2. 验证Access Token的权限和上下文

  • 用jwt.ms解码你的access_token,检查scp字段是否包含User.Read权限(调用/me端点至少需要这个委托权限)。
  • 确认这个token是用户令牌:应用令牌调用/me会直接报错,因为没有关联的用户上下文。你直接访问时用的是用户身份授权,所以能成功,但代码里如果误用了应用令牌就会触发Access Denied。

3. 不要禁用SSL验证(verify=False)

虽然你加了verify=False绕过证书检查,但某些企业防火墙或代理会拦截这类不安全的请求,反而导致权限被拒。开发环境如果有证书问题,可以指定本地CA证书路径,生产环境一定要移除这个参数。

4. 检查Azure AD应用注册的权限配置

如果你的token是通过Azure AD应用注册获取的,要确认:

  • 应用已经添加了User.Read的委托权限
  • 该权限已经获得管理员同意(如果是租户级别的应用场景)

如果以上步骤排查后还是有问题,可以把token解码后的scp、tid字段(敏感信息打码)和响应的完整错误消息贴出来,方便进一步定位问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 23:52:42