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

MS Graph权限疑问:相关调用是否必须使用应用级权限?

关于MS Teams应用Graph权限替代方案的解答

两个Graph API调用的权限选项

先明确你用到的两个API支持的权限类型:

  • GET https://graph.microsoft.com/v1.0/chats/${chatId}/members
    • 应用级权限:ChatMember.Read.All(全局范围)、ChatMember.Read.Chat(仅针对特定聊天的资源权限)
    • 委派权限:ChatMember.Read、ChatMember.ReadWrite(依赖当前登录用户对目标聊天的访问权限)
  • GET https://graph.microsoft.com/v1.0/teams/${groupId}/members
    • 应用级权限:TeamMember.Read.All(全局范围)、TeamMember.Read.Group(仅针对特定团队的资源权限)
    • 委派权限:TeamMember.Read、Directory.Read.All(依赖当前登录用户对目标团队的访问权限)

可行替代方案

1. 改用委派权限(用户上下文模式)

如果你的应用是在用户登录后使用,仅需要访问用户有权查看的聊天/团队成员,可以按以下步骤调整:

  • 在Azure AD中移除原有的ChatMember.Read.All和TeamMember.Read.All应用级权限,添加委派权限ChatMember.Read和TeamMember.Read
  • 调整应用的身份验证流程,从客户端凭据流(应用级权限的无用户登录模式)切换为授权码流,要求用户登录并授权应用访问相关数据
  • 注意:这种模式下,应用无法访问用户无权查看的聊天或团队成员,所有API调用的权限边界完全受限于当前登录用户的权限

2. 使用资源特定权限(RSC)

这是最适配客户IT团队要求的方案,因为权限仅针对应用安装的特定团队/聊天,而非全局范围:

  • 保留Teams应用清单中的TeamMember.Read.Group和ChatMember.Read.Chat权限配置
  • 在Azure AD中彻底移除全局的ChatMember.Read.All和TeamMember.Read.All应用级权限
  • 重新发布应用,客户安装时会被要求授予该应用对当前团队/聊天的成员读取权限,而非全局权限
  • 你之前移除清单权限后应用看似正常,是因为Azure里的全局权限还在生效,正确配置RSC后无需依赖全局应用级权限

3. 排查安装失败的具体原因

切换权限后应用无法安装,大概率是配置不匹配导致的,可从以下方向排查:

  • 检查Azure AD中配置的权限和Teams应用清单里声明的权限是否完全一致
  • 若使用委派权限,需确保应用已配置正确的重定向URI、启用授权码流
  • 查看Azure AD审核日志、Teams管理中心的安装日志,定位具体错误(比如租户权限限制、权限声明格式不合法)

关键结论

这两个Graph调用不需要强制使用应用级权限,权限类型的选择完全取决于你的应用场景:

  • 若需后台无用户交互访问任意聊天/团队成员:必须使用应用级权限
  • 若仅在用户上下文访问其有权查看的资源:适合使用委派权限
  • 若仅访问应用安装的特定团队/聊天:使用资源特定权限(RSC)是最优解

内容的提问来源于stack exchange,提问作者Josh Brown

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 13:00:19