Verification Steps
Verifying signatures manually
Last updated
Was this helpful?
Verifying signatures manually
Last updated
Was this helpful?
Each webhook call includes three headers with additional information that are used for verification:
svix-id
: the unique message identifier for the webhook message. This identifier is unique across all messages, but will be the same when the same webhook is being resent (e.g. due to a previous failure)
svix-timestamp
: timestamp in .
svix-signature
: the encoded list of signatures (space delimited).
The content to sign is composed by concatenating the id, timestamp and payload, separated by the full-stop character (.
). In code, it will look something like:
Where body
is the raw body of the request. The signature is sensitive to any changes, so even a small change in the body will cause the signature to be completely different. This means that you should not change the body in any way before verifying.
So to calculate the expected signature, you should HMAC the signed_content
from above using the base64 portion of your signing secret (this is the part after the whsec_
prefix) as the key. For example, given the secret whsec_MfKQ9r8GKYqrTwjUPD8ILPZIo2LaLaSw
you will want to use MfKQ9r8GKYqrTwjUPD8ILPZIo2LaLaSw
.
For example, this is how you can calculate the signature in:
Make sure to remove the version prefix and delimiter (e.g. v1,
) before verifying the signature.
Please note that to compare the signatures it's recommended to use a constant-time string comparison method in order to prevent timing attacks.
As mentioned above, Lenda also sends the timestamp of the attempt in the svix-timestamp
header. You should compare this timestamp against your system timestamp and make sure it's within your tolerance in order to prevent timestamp attacks.
Lenda uses an with to sign its webhooks.