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

使用Microsoft Graph API Python SDK获取AAD用户数据遇权限不足

问题原因及解决方案

核心问题1:SDK与API权限不匹配

你当前使用的azure.graphrbac是针对Azure AD Graph API(旧版终结点https://graph.windows.net)的SDK,但你的应用注册里配置的权限大概率是针对Microsoft Graph API(新版终结点https://graph.microsoft.com)的,两者属于不同的API体系,权限不通用,直接导致权限校验失败。

核心问题2:权限配置的潜在问题

即使权限对应正确的API,还需要确认两点:

  • 必须配置应用权限(而非委派权限):服务主体(后台运行的应用)无法使用委派权限,需添加User.Read.All或Directory.Read.All这类应用权限
  • 权限必须经过管理员授予同意:应用权限需要全局管理员或对应权限的管理员点击"授予管理员同意",否则权限不会实际生效

正确解决方案:迁移到Microsoft Graph Python SDK

步骤1:安装新版SDK

pip install msgraph-sdk
pip install azure-identity

步骤2:更新应用权限

在Azure AD应用注册中,添加Microsoft Graph的应用权限:

  • 搜索并添加User.Read.All(仅读取用户基础信息)或Directory.Read.All(读取目录内所有数据,包含用户)
  • 点击"授予管理员同意",确保权限生效

步骤3:修改代码

使用新版SDK和Azure Identity获取凭证,调用Microsoft Graph API:

from azure.identity import ClientSecretCredential
from msgraph import GraphServiceClient

# 配置参数
tenant_id = "你的租户ID"
client_id = "你的应用客户端ID"
client_secret = "你的应用客户端密钥"

# 获取服务主体凭证
credential = ClientSecretCredential(
    tenant_id=tenant_id,
    client_id=client_id,
    client_secret=client_secret
)

# 初始化Graph客户端
graph_client = GraphServiceClient(credential)

# 获取指定用户详情
user = graph_client.users.by_user_id("目标用户ObjectId").get()
print(user.display_name, user.mail)

额外说明

  • 旧版Azure AD Graph API已被Microsoft弃用,建议全面迁移到Microsoft Graph API以获得持续支持
  • 如果因特殊需求必须使用旧版Azure AD Graph,需要在应用注册中添加Azure AD Graph的应用权限并授予同意,但不推荐这种做法

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 23:25:34