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

使用Microsoft Graph获取组成员详细信息是否必须Directory.ReadAll权限?

Microsoft Graph获取组成员详细信息是否必须Directory.ReadAll权限?

嗨,我来帮你理清这个权限问题~

首先明确说:完全不需要Directory.ReadAll这么宽泛的权限,你现在遇到的问题是权限粒度没选对,给你拆解清楚:

  1. 为什么你现在只能拿到成员ID?
    你当前的GroupMember.ReadAll应用权限,其实只允许你枚举组成员的「存在性」——也就是知道谁在这个组里,但只能获取到最基础的标识信息(比如ID)。因为这个权限的范围只覆盖了「组成员关系」本身,不包含成员对象的详细目录属性(比如displayName、userPrincipalName)。

  2. 更合适的权限选择(遵循最小权限原则)
    要获取成员的详细信息,分两种场景选对应的权限:

    • 如果组成员都是用户:只需要给应用注册添加User.Read.All应用权限就够了。这个权限专门用于读取所有用户的属性,比Directory.ReadAll的范围窄很多,更安全,也更符合权限最小化的最佳实践。
    • 如果组里还包含其他目录对象(比如嵌套组、设备):这种情况下可能需要Directory.ReadAll,但这类场景相对少见,优先用更细粒度的权限。
  3. 代码调用的小提示
    当你在Python代码里调用Graph API获取成员时,记得用$select参数指定你需要的属性,这样能精准拿到想要的字段,还能减少不必要的数据传输。比如在请求里加上:

    $select=id,displayName,userPrincipalName
    

    对应到你的get_group_members函数里,发起请求的URL可以写成:

    url = f"/groups/{group_id}/members?$select=id,displayName,userPrincipalName"
    

另外补充一句:如果你用的是代码里的委派权限流(用户名密码流),那对应的委派权限User.ReadBasic.All或者User.Read.All也能实现同样的效果,同样不需要Directory.ReadAll。

备注:内容来源于stack exchange,提问作者ynnaij

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.15 14:24:50