Microsoft Graph 是微软提供的一套统一 API 端点,用于访问 Microsoft 365 生态系统中的数据和服务。委托权限(Delegated Permissions)是 Microsoft Graph 权限模型中的一种重要类型,它允许应用程序以登录用户的身份访问资源,权限范围受限于该用户本身拥有的访问级别。
在实际开发中,理解委托权限的分类和使用场景至关重要。与应用程序权限(Application Permissions)不同,委托权限需要用户登录并同意,且应用程序只能执行该用户有权执行的操作。这种权限模型既保障了安全性,又提供了灵活性。
基础身份验证权限是大多数应用程序最先接触的权限类型,主要包括:
openid:允许应用程序使用 OpenID Connect 协议验证用户身份profile:访问用户的基本个人信息(姓名、职位等)email:获取用户的电子邮件地址offline_access:获取刷新令牌,保持长期访问权限这些权限通常标记为"否",意味着普通用户可以直接授权,不需要管理员介入。例如,一个简单的日程管理应用可能只需要openid和profile权限就能实现基本的用户识别功能。
用户管理权限控制对 Azure AD 用户对象的访问,分为几个层级:
基本用户权限:
User.Read:读取登录用户的基本信息User.ReadWrite:读写登录用户的信息全局用户权限:
User.Read.All:读取组织中所有用户的完整信息User.ReadWrite.All:读写所有用户信息敏感操作权限:
User.DeleteRestore.All:删除和恢复用户账户User.ManageIdentities.All:管理用户身份User.PasswordProfile.ReadWrite.All:重置用户密码重要提示:大多数全局用户权限和敏感操作权限标记为"是",需要管理员同意。这是为了防止普通用户滥用这些高权限操作。
组和团队权限控制对 Microsoft 365 组和 Teams 的访问:
Group.Read.All:读取所有组信息Group.ReadWrite.All:创建、更新和删除组Team.ReadBasic.All:读取团队基本信息Team.Create:创建新团队Channel.ReadWrite.All:管理团队频道团队相关权限的一个典型应用场景是开发团队协作工具。例如,一个团队仪表板应用可能需要Team.ReadBasic.All来显示团队列表,同时需要Channel.ReadWrite.All来管理频道内容。
申请权限时应遵循最小权限原则:
例如,如果应用只需要显示用户姓名和头像,申请profile和User.Read就足够了,而不需要申请User.Read.All。
Microsoft Graph 支持增量同意,允许应用在运行时根据需要请求额外权限。这种策略可以:
实现增量同意时,可以使用prompt=consent参数引导用户同意新权限。
对于标记为"是"的权限,需要走管理员同意流程:
构建管理员同意URL:
code复制https://login.microsoftonline.com/{tenant}/adminconsent?
client_id={appId}
&state={state}
&redirect_uri={redirectUri}
管理员访问该URL并同意权限
应用接收同意结果并继续流程
当收到403 Forbidden错误时,通常意味着:
解决方案:
如果用户频繁看到同意提示,可能是由于:
解决方案:
在跨租户场景下,需要注意:
令牌保护:
权限审查:
用户教育:
Microsoft Graph 权限可以与Azure AD条件访问策略集成,实现更细粒度的访问控制。例如,可以配置策略要求:
在某些复杂场景下,可能需要组合不同类型的权限:
通过Microsoft Graph的审计日志API(AuditLog.Read.All),可以:
典型权限需求:
User.Read:识别登录用户User.ReadWrite:允许用户更新自己的信息Calendar.ReadWrite:管理个人日历实现要点:
典型权限需求:
Team.ReadBasic.All:获取团队列表Channel.ReadWrite.All:管理团队频道Chat.ReadWrite:处理团队聊天实现要点:
典型权限需求:
User.Read.All:获取用户数据Group.Read.All:分析组结构Reports.Read.All:访问使用情况报告实现要点:
批量请求:
$batch端点合并多个请求选择性属性:
$select只获取需要的属性分页处理:
缓存策略:
Microsoft Graph权限模型正在不断演进,值得关注的趋势包括:
更细粒度的权限控制:
增强的同意体验:
与零信任架构的深度集成:
Microsoft Graph委托权限系统提供了强大而灵活的访问控制机制。在实际应用中,建议:
通过合理规划和实施权限策略,开发者可以构建既功能强大又安全可靠的Microsoft 365集成应用。