飞书Webhook签名验证过程中,如何从踩坑到填坑?

摘要:作为一名勤劳的牛马,我在对接飞书开放平台时遇到了一个看似简单却让人抓狂的问题——签名验证总是失败。经过一番深入研究,我发现这个问题背后隐藏着许多容易被忽视的细节。今天,我想用最通俗的语言,把这段经历记录下来。 故事的开始:一个神秘的签名验证
作为一名勤劳的牛马,我在对接飞书开放平台时遇到了一个看似简单却让人抓狂的问题——签名验证总是失败。经过一番深入研究,我发现这个问题背后隐藏着许多容易被忽视的细节。今天,我想用最通俗的语言,把这段经历记录下来。 故事的开始:一个神秘的签名验证失败 问题现场 那是一个普通的工作日下午,我正在为公司的内部系统对接飞书的事件订阅功能。一切看起来都很顺利: ✅ 应用创建完成 ✅ 事件订阅配置完成 ✅ Webhook 地址填写正确 ✅ 代码部署上线 但是,当我满怀期待地在飞书后台点击"验证"按钮时,系统日志里出现了这样一行红色的错误: warn: Mud.Feishu.Webhook.FeishuEventValidator[0] 请求头签名验证失败: 计算 +OGVt6ye......, 期望 bc5b503a...... 什么?签名验证失败? 我检查了配置文件,密钥都填对了;我检查了代码逻辑,看起来也没问题。但就是验证不通过! 初步分析 让我们先看看日志里的其他信息: dbug: Mud.Feishu.Webhook.FeishuEventDecryptor[0] 解密成功,结果长度: 489 dbug: Mud.Feishu.Webhook.FeishuEventDecryptor[0] 解密后的JSON数据: {"schema":"2.0","header":{"event_id":"...","token":"fCt8xobp..."}} info: Mud.Feishu.Webhook.FeishuEventDecryptor[0] 事件数据解密成功 - EventType: [contact.department.created_v3] 有意思的是: ✅ 数据解密成功了 ✅ 事件类型识别正确 ❌ 但签名验证失败了 这说明什么?说明我的 Encrypt Key(加密密钥)是对的,但签名验证的逻辑肯定哪里出了问题。 飞书 Webhook 的安全机制 在深入问题之前,让我们先理解飞书是如何保护 Webhook 安全的。
阅读全文