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

MS Teams消息扩展SSO调用getAuthToken无法获取User.Read声明问题求助

问题根因

你对microsoftTeams.authentication.getAuthToken的参数和返回值用途理解有误:

  • 这个接口返回的是 Teams 平台发放的身份令牌,本身仅用于验证用户身份,不会包含任何 Graph 接口的权限声明
  • AuthTokenRequest的claims参数仅用于要求Azure AD返回额外的身份属性声明,传入Graph权限地址完全不会生效,你之前的写法是错误的。

正确实现流程

  1. AAD应用配置检查
    先确认你在Azure AD应用注册中,已经添加了User.Read的委托权限,且该权限未设置为「需要管理员同意」。
  2. 前端逻辑调整
    去掉getAuthToken的claims参数,正常拿身份令牌传给服务端即可:
microsoftTeams.authentication.getAuthToken({
  successCallback: (token: string) => {
    // 直接把token传给后端服务,不需要做额外处理
    callYourBackendService(token);
  },
  failureCallback: (message: string) => console.log("Failed:", message)
});
  1. 服务端OBO流处理
    你用node.js可以直接用@azure/msal-node库实现On-Behalf-Of流,将前端传的Teams身份令牌换成Graph访问令牌:
  • 如果用户已经同意过User.Read权限,会直接返回有效Graph令牌,你就可以正常调用Graph接口
  • 如果用户未同意,OBO请求会返回consent_required错误,这时候你需要返回消息扩展的授权触发配置,让Teams弹出权限同意窗口,用户同意后流程会重新触发,再次调用OBO就能拿到有效令牌。
  1. 权限同意弹窗触发
    收到consent_required错误时,消息扩展需要返回对应结构的响应自动唤起同意弹窗,不需要你提前要求用户登录。

为什么机器人场景正常

你参考的app-sso机器人示例,已经内置了OBO流的consent错误处理逻辑,会自动触发权限同意弹窗,而你之前的消息扩展逻辑里没有处理这个错误分支,所以用户看不到同意提示,自然拿不到带User.Read声明的Graph令牌。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 19:45:03