Here is an explainer detailing this new API idea.
Problem
The web ecosystem relies heavily on building trust signals to detect fraudulent or spammy actors. One common way this is done is via tracking an individual browser’s activity across the web, usually via associating stable identifiers across sites.
Preventing fraud is a legitimate use case that the web should support, but it shouldn’t require an API as powerful as a stable, global, per-user identifier. In third party contexts, merely segmenting users into trusted and untrusted sets seems like a useful primitive that also preserves privacy. This kind of fraud protection is important both for CDNs, as well as for the ad industry which receives a large amount of invalid, fraudulent traffic.
Solution
This API proposes a new per-origin storage area for “Privacy Pass” style cryptographic tokens, which are accessible in third party contexts. These tokens are non-personalized and cannot be used to track users, but are cryptographically signed so they cannot be forged.
When an origin is in a context where they trust the user, they can issue the browser a batch of tokens, which can be “spent” at a later time in a context where the user would otherwise be unknown or less trusted. Crucially, the tokens are indistinguishable from one another, preventing websites from tracking users through them.
// Fetch trust tokens on one site...
fetchTrustTokens('/request-tokens').then(...)
// Redeem trust tokens on another site!
getTrustAttestation('https://token-issuer.com', {refresh-policy: 'use-cached').then(...)
We further propose an extension mechanism for the browser to sign outgoing requests with keys bound to a particular token redemption.
Please take a look! We hope to gather feedback via Github issues on the explainer.