Twitter CRC Challenge 不适用于 AWS Lambda/API 网关
Posted
技术标签:
【中文标题】Twitter CRC Challenge 不适用于 AWS Lambda/API 网关【英文标题】:Twitter CRC Challenge not working on AWS Lambda/API Gateway 【发布时间】:2022-01-15 22:57:32 【问题描述】:我正在尝试在 AWS Lambda 和 API 网关上进行 twitter webhook CRC 挑战
我一直在关注这个tutorial,到目前为止,webhook 可以在本地工作,但不能在 AWS 上工作。
这是我在 AWS Lambda 中的代码:
import json
import base64
import hashlib
import hmac
import json
from flask import Flask, request, Response, jsonify
key = '#####################'
def lambda_handler(event, context):
return
'statusCode': 200,
'body': json.dumps('Hello from Lambda!')
def webhook_challenge():
consumer_secret_bytes = bytes(key, 'utf-8')
message = bytes(request.args.get('crc_token'),'utf-8')
sha256_hash_digest = hmac.new(consumer_secret_bytes, message , digestmod=hashlib.sha256).digest()
response=
'response_token':'sha256='+base64.b64encode(sha256_hash_digest).decode('utf-8')
return json.dumps(response)
webhook_challenge()
我向 API Gateway 链接发送 get 请求时得到的响应
https://#######.execute-api.us-east-2.amazonaws.com/dev/twitter?crc_token=foo
我收到一个错误:
"message":"缺少身份验证令牌"
当我在 API 网关上运行测试时,我会在日志末尾看到:
2021 年 12 月 11 日星期六 19:09:54 UTC:端点响应标头:Date=Sat,2021 年 12 月 11 日 19:09:54 GMT,Content-Type=application/json,Content-Length=114,Connection=keep -alive,x-amzn-RequestId=5c1ac93d-9f24-43b1-a8dd-42ef0210a4e3,X-Amz-Function-Error=未处理,x-amzn-Remapped-Content-Length=0,X-Amz-Executed-Version=$最新,X-Amzn-Trace-Id=root=1-61b4f77e-f17e25f619a9c5287a90ca8a;sampled=0 2021 年 12 月 11 日星期六 19:09:54 UTC:转换前的端点响应正文:"errorMessage":"2021-12-11T19:09:54.379Z 5c1ac93d-9f24-43b1-a8dd-42ef0210a4e3 任务在 3.02 秒后超时" 2021 年 12 月 11 日星期六 19:09:54 UTC:由于客户函数错误,Lambda 执行失败,状态为 200:2021-12-11T19:09:54.379Z 5c1ac93d-9f24-43b1-a8dd-42ef0210a4e3 任务在 3.02 秒后超时。 Lambda 请求 ID:5c1ac93d-9f24-43b1-a8dd-42ef0210a4e3 2021 年 12 月 11 日星期六 19:09:54 UTC:方法已完成,状态为:502
我确信这很简单,但这是我第一次使用 webhook 和 AWS,所以我还不能完全理解它,任何帮助将不胜感激
【问题讨论】:
【参考方案1】:来自错误信息:
"errorMessage":"2021-12-11T19:09:54.379Z 5c1ac93d-9f24-43b1-a8dd-42ef0210a4e3 Task timed out after 3.02 seconds"
默认情况下,Lambda 设置为运行 3 秒,但这对于您的用例来说还不够。您可以为 Lambda 增加 General Configurations
中函数的允许运行时间:
对于 API 网关错误:
"message":"Missing Authentication Token"
首先,您应该检查 API Gateway 方法是否已正确部署,并且您是否使用正确的 url 调用正确的方法。对于您的 API 的任何更改,您必须重新部署它,否则将不会考虑:
如果您设置了 API 密钥,则应使用 x-api-key
标头传递它。
【讨论】:
以上是关于Twitter CRC Challenge 不适用于 AWS Lambda/API 网关的主要内容,如果未能解决你的问题,请参考以下文章
如何使用适用于 Android 的 Fabric Sdk 从 Twitter 注销
编码适用于 1 而不是 Twitter 中使用 python 的其他列表