Microsoft Teams任务模块SSO调用返回Definition not found错误问询
报错根因及解决方案
你遇到的Definition not found报错由以下三类常见问题触发,按优先级排查即可解决:
- SDK未完成初始化就调用接口
@microsoft/teams-js 1.x版本所有接口必须等initialize方法执行完成回调后才能调用,未完成初始化时authentication对象未挂载,就会触发定义不存在的报错。 - resources参数不符合规范
1.x版本的getAuthToken仅支持单次传入1个资源地址,你传入了4个不同的Graph资源,不符合参数校验规则,会触发内部逻辑报错。 - 封装的teamsService实例异常
你当前通过封装的this.teamsService调用接口,大概率是封装逻辑里没有正确挂载SDK的全局对象,导致authentication属性丢失。
修复步骤
- 先调整SDK初始化逻辑,所有接口调用必须放在初始化回调中:
// 全局初始化SDK,只需要执行一次 microsoftTeams.initialize(() => { // 此处执行鉴权、获取上下文等所有SDK相关逻辑 });
- 调整resources参数,只传单个资源地址。你需要的所有Graph权限可以统一在Azure AD应用注册的权限配置中添加,调用时只传
https://graph.microsoft.com即可,不需要拆分多个资源:
return new Observable<any>(subscriber => { microsoftTeams.authentication.getAuthToken({ resources: ['https://graph.microsoft.com'], successCallback: clientToken => { subscriber.next({ clientToken, type: this.authType }); subscriber.complete(); }, failureCallback: reason => { subscriber.error(reason); } }); });
- 额外排查点:执行
npm ls @microsoft/teams-js确认依赖树中只有一个版本的SDK,多版本共存会导致全局对象挂载异常。如果仍未解决,可以升级到2.x稳定版本的SDK,接口兼容的同时内部异常处理逻辑更完善。
内容的提问来源于stack exchange,提问作者Ritesh Thakkar
相关产品推荐
相关产品推荐

