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

Teams机器人静态标签页如何验证请求来源与用户真实身份

结论

绝对不能直接把URL中的tenantId、userId作为身份校验依据,这两个参数是明文传递的占位符,可被随意篡改拼接,直接使用会导致任意用户越权访问他人订单信息的安全风险。

合法校验Teams标签页请求的标准方案

1. 明确URL占位符的定位

你在manifest中配置的{tid}、{userObjectId}只是Teams提供的上下文快捷参数,作用是方便页面初始化时快速拿到上下文标识,本身不具备任何防篡改、防伪造的能力,知晓规则的用户可以随意拼接任意用户ID构造访问地址,完全不能作为信任凭证。

2. 基于Teams SSO流程做可信身份校验

这是官方推荐的安全方案,流程如下:

  • 提前在Azure AD中注册你的应用,和Teams机器人共用同一个应用注册即可,配置好对应的重定向地址、权限范围
  • 在Teams应用清单中补充webApplicationInfo配置,填入Azure AD应用的客户端ID、所需的权限
  • 静态标签页加载完成后,前端引入Teams JS SDK,调用microsoftTeams.authentication.getAuthToken()方法,Teams会自动完成静默授权,返回当前登录用户的Azure AD id_token,这个过程不需要用户手动输入账号密码
  • 前端将获取到的id_token发送到你的自有服务后端,后端使用Azure AD公开的公钥校验token的签名有效性,同时校验token的签发者、受众(必须是你自己的应用客户端ID)、过期时间是否合法
  • 校验通过后,从token中解析出可信的租户ID(tid字段)、用户对象ID(oid字段),和你系统内已绑定的用户账号做匹配,匹配成功后下发你自有系统的登录凭证(如Session Cookie、业务JWT)
  • 后续所有订单数据的查询请求,全部基于这个可信登录凭证做权限校验,完全不要读取URL上的tenantId、userId参数做鉴权

3. 额外安全校验项

  • 如果你的应用只对指定租户开放,校验token中的tid字段是否在允许的租户列表内
  • 校验token的azp(授权方)字段是否为你的Teams应用ID,避免跨应用伪造请求
  • 所有鉴权逻辑必须放在后端实现,禁止前端拿到用户ID后直接请求敏感数据

补充:这套SSO流程和你已经实现的机器人登录流程完全打通,用户在机器人端完成登录后,打开静态标签页时不会触发重复登录,体验是无感的。

避坑提醒
  • 不要通过请求的Referer字段判断是否来自Teams客户端,Referer可以被随意篡改,完全不具备可信度
  • 不要自定义签名参数拼接在URL中做校验,前端代码可逆、密钥容易泄露,安全等级极低
  • 不要为了省事跳过token校验环节直接信任前端传入的用户标识

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 22:27:20