Hello!
I’m trying to verify a SHA256 signature generated with PHP/Ruby in a Worker.
I tried using the signing requests example, but all verify()
method always return false
.
Could someone point out what I’m doing wrong?
// expiry=1626128829
// email=till%40layla[snip].com
// secret=851a819217ae1ef6f8b5e325a48f82e4e0b1c2e2df169bfd57156816af326c29
async function handleRequest(request) {
const url = new URL(request.url);
const encoder = new TextEncoder()
const expiry = Number(url.searchParams.get("expiry"))
const dataToAuthenticate = url.searchParams.get("email") + expiry
const secretKeyData = encoder.encode("squad-taps-earphone-sleek")
const key = await crypto.subtle.importKey(
"raw",
secretKeyData,
{ name: "HMAC", hash: "SHA-256" },
false,
["verify"],
)
// 851a819217ae1ef6f8b5e325a48f82e4e0b1c2e2df169bfd57156816af326c29
const textSecret = url.searchParams.get("secret")
const verified = await crypto.subtle.verify(
"HMAC",
key,
encoder.encode(textSecret),
encoder.encode(dataToAuthenticate)
)
return new Response(verified ? 'verified' : 'not verified')
}