Hi there, I just got through implementing this for a brief mention in my presentation that I'll do at DEF CON (as an alternative to email verification with OTPs, please please make this happen! :) ). I ran into a few rough edges that should hopefully help EVP's development.
The spec (
https://www.ietf.org/archive/id/draft-hardt-email-verification-00.html#section-4.2-2.2 ) section 4.2. HTTP Request Verification says:
The issuer MUST verify the request headers:
Content-Type is application/json
Sec-Fetch-Dest is email-verification
Signature-Input is present
Signature is present
Signature-Key is present with sig=hwk scheme
However... Chrome is sending "emailverification" instead of "email-verification" for "Sec-Fetch-Dest" and your demo (at
https://github.com/rowan-m/rowan-fyi/blob/main/src/pages/made/email-verification/index.astro ) does not check these things at all.
"emailverification"
seems to be coming from
https://github.com/chromium/chromium/blob/150.0.7871.129/services/network/public/cpp/request_destination.cc#L43-L50 and it looks like several of those strings have no hyphens or casing.
Another issue, already solved in
https://github.com/chromium/chromium/commit/46b2fe3a293f39f0a99ffa6c99a6c1ba47379a9b , is how nonce was being pulled through getAttribute instead which broke due to the whole nonce internal slot hiding behavior when script nonces are a thing. My temp workaround is to patch it back in through a data-attribute in js on load for now.
I'm using chrome 150.0.7871.129 and I managed to produce a crash while clicking on the auto complete option while having the histogram tab up for debugging reasons
Crash from Sunday, July 19, 2026 at 8:48:04 PM
Status: Uploaded
Uploaded Crash Report ID: ae257880fd62e492
Upload Time: Sunday, July 19, 2026 at 9:06:26 PM
The chrome implementation doesn't match the spec for audience / issuer
payload.aud = issuer.Serialize();
I hope this is helpful and I hope this feature matures.
Best wishes,
Levi