如何验证发送至Microsoft Bot的消息是否来自MS Teams且未被仿冒
MS Teams 传入请求合法性验证实现方案
MS Teams 提供了与你期望的签名验证逻辑一致的合法性校验机制,可在处理Bot消息前确认请求确实来自官方服务,杜绝仿冒风险,具体实现方案如下:
核心校验原理
Bot 注册时生成的专属 Client Secret 会作为共享密钥,Teams 向你的服务接口发送请求时,会用该密钥对请求相关信息签名生成JWT令牌,放在请求头中传输,服务端校验令牌合法性即可确认请求来源有效。
手动校验步骤(不使用官方SDK场景)
- 提取请求头
Authorization字段的Bearer令牌,字段格式为Bearer <JWT字符串> - 校验JWT的签发方(iss)必须为
https://api.botframework.com - 校验JWT的受众(aud)必须为你的Bot对应的
App ID - 校验JWT的有效期(exp)未超出当前时间
- 使用你的Bot
Client Secret校验JWT的签名有效性,全部校验通过后再执行后续业务逻辑
简化实现(推荐)
如果使用微软官方 Bot Framework SDK 开发,不需要手动编写校验逻辑,SDK已内置全套校验能力,只需要在初始化时正确配置Bot的 App ID 和 Client Secret,所有非法请求会被SDK直接拦截,不会进入业务处理流程。
注意:未完成签名校验的请求必须直接拒绝,不要信任请求体中携带的任意用户、渠道信息,避免伪造请求带来的安全风险。
内容的提问来源于stack exchange,提问作者Mahesh
相关产品推荐
相关产品推荐

