0

我正在使用一个相当标准的 Webhook 模式,其中调用的端点由 AWS API Gateway 和后端 Lambda 提供。

Webex Teams webhook 允许您提供一个密钥,该密钥用于使用在“X-Spark-Signature”标头中发送的结果哈希对传出有效负载进行签名。

我创建了一个 webhook 并在我的 Lambda 中接收事件有效负载,但哈希值不匹配。下面是我的示例代码:

def validate(key, raw):
    hashed = hmac.new(key, raw, hashlib.sha1)
    print(hashed.hexdigest())
    return hashed.hexdigest()

key = bytes('somecazYs3Cret', 'UTF-8')
raw = bytes(event['body'], 'UTF-8')
signature = event['headers']['X-Spark-Signature']

if validate(key, raw) == signature:
    print('AUTHORIZED')
else:
    print('REJECTED')

在 API Gateway 中,我使用此处所述的映射模板将请求标头传递给我的 Lambda:https ://aws.amazon.com/premiumsupport/knowledge-center/custom-headers-api-gateway-lambda/

当请求有效负载到达时,包括正文在内的所有字段都已作为 python 类型的 dict 加载。所以我试图将正文序列化回字符串以检查哈希。

有什么帮助吗?

4

1 回答 1

0

事实证明,这就是 API Gateway 将请求负载传递给 Lambda 的方式。而不是“映射模板”,我必须启用“使用 Lambda 代理集成”功能,它将原始正文 JSON 作为字符串传递。

启用此功能并删除json.dumps()我的部分代码后,哈希验证正常。

于 2022-01-11T11:44:13.857 回答