如何限制Microsoft Graph API权限,让普通用户仅能访问自身数据?
限制Microsoft Graph API普通用户仅访问自身数据的解决方案
1. 调整Azure AD应用注册的权限配置
- 删除应用里的应用权限(比如
User.Read.All这类全局级权限),只保留委派权限中的User.Read——这个权限仅允许用户读取自身信息。 - 注意:务必移除
User.ReadBasic.All,该权限会让普通用户读取组织内所有用户的基础资料,完全不符合你的限制需求。
2. 修改代码的API请求路径
原代码请求/users会拉取整个组织的用户列表,改成请求当前登录用户专属的端点:
import os from azure.identity import InteractiveBrowserCredential from msgraph.core import GraphClient credential = InteractiveBrowserCredential() client = GraphClient(credential=credential) # 替换为获取当前用户信息的专属端点 result = client.get('/me') print(result.json())
如果要获取当前用户的邮件,用/me/messages替代/users/{user-id}/messages这类全局路径。
3. 验证权限限制效果
- 用普通用户账号登录测试:调用
/users应该返回403权限错误,调用/me或/me/messages能正常返回自身数据。 - 再检查Azure AD应用注册的权限列表,确保没有遗留高权限项,所有委派权限都是用户自身范围的。
核心注意点
- 绝对不要给普通用户分配应用权限,这类权限是服务端级别的全局权限,会直接绕过用户自身的权限限制。
- 委派权限的本质是“以当前登录用户的身份”访问API,所以只要权限范围是针对用户自身的,就不会越权访问组织内其他用户的数据。
内容的提问来源于stack exchange,提问作者user19941595
相关产品推荐
相关产品推荐

