demo · v141
Age Verification
The birthday-correction flow Google Wallet ships against. Instead of asking the user to photograph their driver's licence, request a single boolean claim from a mobile wallet — age over 18 / 21 — and verify the wallet's signed response. Minimum disclosure, maximum privacy.
Heads up
Available behind
chrome://flags/#web-identity-digital-credentials on Chrome 141 desktop. Production use cases are Android with the Credential Manager and a wallet (Google Wallet, IDPass). On unsupported platforms the call is recorded but no presentment dialog opens.
checking support…
awaiting credential request…
the call
// Request only the boolean age claim — no DOB, no name, no licence number
const dcr = await navigator.credentials.get({
mediation: "required",
digital: {
requests: [{
protocol: "openid4vp",
data: {
response_type: "vp_token",
presentation_definition: {
id: "age-over-18",
input_descriptors: [{
id: "org.iso.18013.5.1.mDL",
format: { mso_mdoc: { alg: ["ES256"] } },
constraints: {
limit_disclosure: "required",
fields: [{ path: ["$['org.iso.18013.5.1']['age_over_18']"], intent_to_retain: false }],
},
}],
},
},
}],
},
});
const vpToken = dcr.data.vp_token; // pass to verifier backend for cryptographic check
why this angle
Mobile driver's-licence (mDL) credentials in mDoc format support boolean derived claims like age_over_18 and age_over_21 precisely so age-gated services can do compliance without seeing the date of birth. Google's documented deployment is the canonical example. This concept focuses on the request shape — the actual disclosure happens in the OS picker, and the verifier signature check runs server-side over the returned vp_token.