使用Microsoft Graph获取组成员详细信息是否必须Directory.ReadAll权限?
Microsoft Graph获取组成员详细信息是否必须Directory.ReadAll权限?
嗨,我来帮你理清这个权限问题~
首先明确说:完全不需要Directory.ReadAll这么宽泛的权限,你现在遇到的问题是权限粒度没选对,给你拆解清楚:
为什么你现在只能拿到成员ID?
你当前的GroupMember.ReadAll应用权限,其实只允许你枚举组成员的「存在性」——也就是知道谁在这个组里,但只能获取到最基础的标识信息(比如ID)。因为这个权限的范围只覆盖了「组成员关系」本身,不包含成员对象的详细目录属性(比如displayName、userPrincipalName)。更合适的权限选择(遵循最小权限原则)
要获取成员的详细信息,分两种场景选对应的权限:- 如果组成员都是用户:只需要给应用注册添加
User.Read.All应用权限就够了。这个权限专门用于读取所有用户的属性,比Directory.ReadAll的范围窄很多,更安全,也更符合权限最小化的最佳实践。 - 如果组里还包含其他目录对象(比如嵌套组、设备):这种情况下可能需要
Directory.ReadAll,但这类场景相对少见,优先用更细粒度的权限。
- 如果组成员都是用户:只需要给应用注册添加
代码调用的小提示
当你在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
相关产品推荐
相关产品推荐

