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
相关产品推荐
相关产品推荐

