解析请求体禁止请求签名验证
Posted
技术标签:
【中文标题】解析请求体禁止请求签名验证【英文标题】:Parsing request body prohibits request signature verification 【发布时间】:2020-03-11 18:31:40 【问题描述】:我正在尝试使用 Lambda 函数构建无服务器 Slackbot。在通过 Slack 事件 API 验证请求 URL 时出现错误。 @slack/events-api
是我用来捕获松弛事件的依赖项。
这是我的代码。
const sls = require('serverless-http');
const createEventAdapter = require('@slack/events-api');
require('dotenv').config();
const SLACK_SIGNING_SECRET = process.env
const slackEvents = createEventAdapter( SLACK_SIGNING_SECRET || '' );
slackEvents.on('message', async event =>
console.log('received!')
);
module.exports.server = sls(slackEvents.requestListener());
这是我在验证请求 url 时遇到的错误
Slack 请求 URL 验证
有人可以帮我解决这个问题吗?
【问题讨论】:
【参考方案1】:刚刚遇到了这个确切的问题,并在node-slack-events
中查看了http-handler.js。
我们所要做的就是在serverless-http
解析它之前将原始请求正文存储为rawBody
。
serverless-http
允许您在将其发送到应用程序之前 transform the request — 修复的好机会:
module.exports.handler = serverless(app,
request(request)
request.rawBody = request.body;
,
);
【讨论】:
【参考方案2】:我不确定如何准确解决您的问题,但我知道是什么原因造成的。
您正在使用的库 serverless-http
解析 Slack 发送的 JSON 正文。这会导致抛出错误,因为 slack-api-sdk 期望解析原始请求正文本身。
您能否尝试删除 serverless-http
并仅响应 API Gateway 事件?
【讨论】:
我已将其删除。使用不同的堆栈跟踪仍然会出现相同的错误。 太好了!你能分享堆栈跟踪和你的新处理程序逻辑吗? 嗨亚伦,这是我的新 logic 和 stack_trace。请你看一下。 这是CloudWatch_log。以上是关于解析请求体禁止请求签名验证的主要内容,如果未能解决你的问题,请参考以下文章