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

Teams Bot任务模块SSO获取客户端令牌失败,移动端正常

解决Teams Bot任务模块SSO在桌面/浏览器端报错“Definition not found”的问题

这个问题我之前帮不少开发者排查过,核心原因大多是桌面/浏览器端对Bot任务模块的Deep Link格式、SSO配置的要求比移动端更严格。结合你的场景,给你几个针对性的解决方向:

1. 修复Deep Link的编码问题

你当前用的&是HTML实体编码,但Bot的Hero卡片场景下,桌面和浏览器端的Teams客户端解析时容易出现编码冲突——移动端兼容性更强所以没出问题。建议直接用原始的&符号替代&,同时确保所有动态参数都做URL编码:

修改后的链接代码应该是:

`https://teams.microsoft.com/l/task/${appId}?url=${encodeURIComponent(modalUrl)}&height=${height}&width=${width}&title=${encodeURIComponent(title)}`

这里用encodeURIComponent()处理modalUrl和title,避免特殊字符(比如空格、中文)导致链接解析失败。

2. 确认Bot的SSO权限配置

虽然Tab和消息扩展的SSO正常,但Bot任务模块的SSO需要单独确认以下配置:

  • 在Azure AD应用注册中,给Bot的应用添加正确的API权限:如果是聊天场景,添加TeamsTaskModule.ReadWrite.Chat;如果是团队场景,添加TeamsTaskModule.ReadWrite.Group,并且必须完成管理员同意。
  • 确保任务模块页面中调用SSO时使用的客户端ID是Bot的Azure AD应用ID,别和Tab/消息扩展的应用ID搞混了。

3. 调整任务模块的SSO初始化时机

桌面端Teams对任务模块的SSO初始化时机要求更严格,必须等页面完全加载后再执行SSO相关逻辑。检查你的页面代码:

// 确保在页面加载完成后初始化
window.onload = function() {
  microsoftTeams.initialize();
  // 然后调用获取令牌的方法
  microsoftTeams.authentication.getAuthToken({
    resources: ["你的Azure AD应用ID URI"],
    successCallback: (token) => { /* 处理令牌 */ },
    failureCallback: (error) => { /* 处理错误 */ }
  });
};

避免在页面未加载完成时就调用getAuthToken,这会导致客户端无法识别SSO上下文,抛出“Definition not found”错误。

4. 验证Teams客户端版本

旧版本的桌面端Teams或浏览器可能存在Deep Link和SSO的兼容性问题。建议升级到最新版的Windows/Mac Teams客户端,同时用最新版的Chrome/Edge浏览器测试,排除版本兼容问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 21:28:10