调用Graph API向Teams频道发消息返回HTTP未授权错误该如何解决?
调用Graph API发送Teams频道消息401未授权错误排查指南
你当前调用的是向指定Teams频道发送消息的Graph接口:POST /teams/{team-id}/channels/{channel-id}/messages,出现401未授权错误可按以下步骤逐一排查:
1. 应用权限配置校验
- 你在Azure AD中注册的应用必须配置对应接口的访问权限,该接口支持两类权限:
- 委托权限(有用户登录的交互场景):至少配置
ChannelMessage.Send、Group.ReadWrite.All二者其一,配置完成后必须完成管理员同意操作,未做管理员同意的权限不会生效 - 应用权限(无用户的后台服务场景):至少配置
ChannelMessage.Send、Group.ReadWrite.All二者其一,同样必须完成管理员同意才能生效
- 委托权限(有用户登录的交互场景):至少配置
- 检查你获取Access Token时传入的scope参数:委托权限场景可传入对应权限的完整路径或
https://graph.microsoft.com/.default;应用权限场景必须传入https://graph.microsoft.com/.default,scope错误会导致返回的token没有对应权限
2. Access Token有效性校验
- 将你获取到的Access Token复制到JWT解析工具中查看内容,确认以下字段取值正确:
aud(受众)字段必须为https://graph.microsoft.com,如果填错了资源地址,会直接返回401- 委托权限场景下检查
scp字段、应用权限场景下检查roles字段,必须包含你之前配置的对应权限,没有对应权限说明权限配置或同意流程存在问题 - 检查
exp(过期时间)字段,确认token未过期,过期token调用任何Graph接口都会返回401
3. 目标资源校验
- 确认请求路径中
{team-id}、{channel-id}两个参数取值正确,如果你填写的团队ID、频道ID不存在,或者当前使用的账号/应用没有该团队的访问权限,也会返回401类错误 - 你可以先调用
GET /teams/{team-id}和GET /teams/{team-id}/channels/{channel-id}两个接口,验证ID的正确性以及当前token对该资源的访问权限
4. 请求格式校验
- 确认HTTP请求头中的Authorization字段格式正确,必须为
Bearer {你的Access Token},注意Bearer和token内容之间必须有一个空格,多写、漏写空格都会导致鉴权失败 - 确认请求的根域名和版本号正确,正确的完整接口路径为
https://graph.microsoft.com/v1.0/teams/{team-id}/channels/{channel-id}/messages,填错版本号或域名都会导致鉴权失败
内容的提问来源于stack exchange,提问作者Tsang So
相关产品推荐
相关产品推荐

