验证综合签名
了验证您收到的事件是否是由 Synthesia 发送的,我们在每个事件的标头中包含一个签名。然后,您可以使用我们为每个 Webhook 订阅提供的唯一秘密来构建和验证此签名。Synthesia-Signature
请注意,如果此签名遭到破坏,重新创建 Webhook 订阅至关重要,否则不良行为者将能够以 Synthesia 为幌子向您的系统发送事件。
你们如何验证我们的签名?
以下步骤描述了如何构建签名,以便与我们提供的签名进行比较。如果它们相同,您可以确信该事件是由我们发送的。
步骤1:获取请求内容
我们需要从请求中得到两件事;在标头和请求正文中找到的请求时间戳。Synthesia-Timestamp
from flask import request
request_timestamp = request.headers["Synthesia-Timestamp"]
request_body = request.data.decode("utf-8")
第 2 步:创建消息
要创建要签名的消息,请使用字符连接时间戳和请求正文(实际的 JSON 负载):.
message = ".".join((request_timestamp, request_body))
第 3 步:构建签名
然后创建签名,即使用 SHA256 哈希函数创建的 HMAC,方法是使用您的 Webhook 密钥作为签名密钥对消息进行签名。
import hashlib
import hmac
key = "..." # This is your webhook secret.
signature = hmac.new(
key.encode("utf-8"),
message.encode("utf-8"),
hashlib.sha256,
).hexdigest()
第 4 步:比较签名
将计算出的签名与我们在标头中提供的签名进行比较。Synthesia-Signature
assert signature == request.headers["Synthesia-Signature"]
第 5 步:比较时间戳
或者,通过检查是否在您的容忍范围内来保护自己免受定时攻击。例如,您可以选择忽略 10 分钟前创建的事件。Synthesia-Timestamp
最后修改时间: 10 个月前