【发布时间】:2022-01-13 05:04:23
【问题描述】:
我正在使用事件 API 构建一个 Slack 机器人作为工作实验。我目前在验证请求时遇到问题,我不确定自己做错了什么。
机器人是使用 Typescript/Node/AWS Lambda/API Gateway 实现的。我用来验证的代码如下所示
import * as crypto from 'crypto';
export const validateSlackRequest = (
requestSignature: string,
signingSecret: string,
timestamp: string,
body: string,
) => {
const baseString = `v0:${timestamp}:${body}`;
const signature = 'v0=' + crypto.createHmac('sha256', signingSecret)
.update(baseString).digest('hex');
if (!crypto.timingSafeEqual(Buffer.from(requestSignature, 'utf8'), Buffer.from(signature, 'utf8'))) {
throw new Error('Slack request verification failed');
}
};
其中body 只是传递给lambda 的event.body 属性,逐字逐句。目前,当我使用 Slack 教程 here 中的数据时,我围绕这个 pass 编写的单元测试,但是当我在本地替换来自真实请求的数据时失败。
我一直在使用this tutorial 来构建我的代码。令我困惑的是,该教程似乎建议我应该将正文转换为查询字符串格式,然后再将其用作我的基本字符串,尽管 Slack 文档对此只字未提,并说“在反序列化之前使用原始请求正文来自 JSON 或其他形式。”。
【问题讨论】:
-
你使用的是http body还是slack event body?
-
我正在使用原始请求正文
标签: node.js typescript amazon-web-services slack