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

M365/Office环境下Teams自定义应用DeepLink跳转问题求助

解决方案:Teams自定义应用在M365/Office环境中认证跳转问题

核心问题原因

使用固定的msteams://协议DeepLink会强制唤起Teams桌面客户端,而M365/Office嵌入环境要求认证后保持在当前网页上下文,这违反了Partner Center的审核规范。

通过识别当前运行环境,动态选择对应的回调链接格式,避免强制跳转桌面客户端:

1. 捕获运行环境上下文

在前端发起认证请求前,使用Teams JS SDK获取当前环境信息:

  • 通过context.frameContext判断是否处于Office/M365嵌入环境(值为office或m365)
  • 通过context.clientType区分桌面、网页、移动端客户端

2. 动态生成回调链接

后端根据前端传递的环境参数,选择对应的协议:

  • Teams桌面/移动端:保留msteams://协议链接
  • M365/Office嵌入环境、Teams网页版:使用HTTPS格式的Web版DeepLink

代码示例

前端(获取上下文并发起认证)

microsoftTeams.getContext((context) => {
  const isOfficeEmbedded = ['office', 'm365'].includes(context.frameContext);
  // 将环境信息存入state,后端回调时解析
  const state = JSON.stringify({
    authId: 'your-auth-id',
    clientType: isOfficeEmbedded ? 'office-embedded' : 'teams-native'
  });
  // 跳转至外部认证提供商
  window.location.href = `/auth/init?state=${encodeURIComponent(state)}`;
});

后端(动态生成回调链接)

// 解析认证回调中的state参数
const state = JSON.parse(decodeURIComponent(req.query.state));
const authId = state.authId;
const authCode = req.query.code;

// 根据客户端类型选择回调链接
let callbackUrl;
if (state.clientType === 'office-embedded') {
  // Web版回调链接,适配M365/Office嵌入环境
  callbackUrl = `https://teams.microsoft.com/l/auth-callback?authId=${authId}&result=${authCode}`;
} else {
  // 原生客户端回调链接
  callbackUrl = `msteams://teams.microsoft.com/l/auth-callback?authId=${authId}&result=${authCode}`;
}

return res.redirect(callbackUrl);

官方合规依据

  • Teams认证文档明确要求,嵌入在M365生态中的应用需使用Web兼容的回调链接,避免强制切换客户端
  • Partner Center审核规范中,应用必须适配所有嵌入场景,不得强制跳转至独立客户端

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 19:37:36