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 注销

检查 CRC 多项式的错误检测能力

单片机通信的加密和解密

编码适用于 1 而不是 Twitter 中使用 python 的其他列表

xml 适用于Google协作平台的Twitter Feed模块

在 twitter 中获取不记名令牌的问题