Wat is OpenID4VP?
OpenID for Verifiable Presentations (OpenID4VP) is het protocol waarmee EU Digital Identity Wallets geverifieerde identiteitsattributen delen met bedrijven (Relying Parties genoemd). Het vormt de technische ruggengraat van de eIDAS 2.0-identiteitsverificatiestroom.
Wanneer een gebruiker bij het afrekenen een QR-code scant en zijn wallet terugmeldt "deze persoon is ouder dan 18", verloopt die uitwisseling via OpenID4VP.
De verificatiestroom
De OpenID4VP-stroom kent vier actoren:
- Issuer -- de overheid of vertrouwde autoriteit die het credential heeft uitgegeven (bijv. de Oostenrijkse overheid die een nationale ID uitgeeft)
- Holder -- de burger met de EUDI Wallet op zijn telefoon
- Verifier (Relying Party) -- het bedrijf dat de verificatie aanvraagt (uw webshop, KYC-systeem, enz.)
- Trust Framework -- de EU Trusted Lists die vastleggen welke issuers en verifiers legitiem zijn
Stap voor stap
1. Verifier stelt een Authorization Request op
↓
2. De aanvraag wordt gecodeerd in een QR-code (of deep link)
↓
3. Holder scant de QR-code met de EUDI Wallet
↓
4. De Wallet verwerkt de aanvraag en toont wat er wordt gevraagd
↓
5. Holder controleert en keurt goed met biometrie/pincode
↓
6. De Wallet maakt een Verifiable Presentation (VP) aan
↓
7. De VP wordt verzonden naar het response-endpoint van de Verifier
↓
8. Verifier valideert de VP cryptografisch
↓
9. Geverifieerde attributen worden geëxtraheerd en gebruikt
Twee credentialformaten
EUDI Wallets ondersteunen twee credentialformaten, elk met een eigen cryptografisch verificatiepad:
SD-JWT VC (Selective Disclosure JWT)
Gebruikt voor remote verificatiestromen (online, cross-device). Het credential is een JSON Web Token met mogelijkheden voor selectieve openbaarmaking.
- Format: JSON-gebaseerd
- Selective Disclosure: hash-gebaseerd salten -- de issuer ondertekent alle claims, maar de holder kan er alleen specifieke onthullen
- Signature: JWS (JSON Web Signature) met ES256
- Verification: JWT parsen → disclosures reconstrueren → hashes verifiëren → signature valideren → trust chain van de issuer controleren
Header.Payload.Signature~Disclosure1~Disclosure2~KeyBindingJWT
mdoc / mDL (Mobile Document)
Gebruikt voor proximity-verificatiestromen (in persoon, NFC, BLE). Gebaseerd op ISO 18013-5.
- Format: CBOR-gebaseerd (binair)
- Selective Disclosure: ingebouwd in de datastructuur -- namespaces en dataelementen
- Signature: COSE (CBOR Object Signing and Encryption)
- Verification: CBOR decoderen → COSE-signature verifiëren → apparaatauthenticatie valideren → certificaatketen van de issuer controleren
Beide formaten bereiken hetzelfde doel -- cryptografisch bewijzen dat een vertrouwde issuer specifieke claims over de holder heeft geattesteerd -- maar via fundamenteel verschillende technische paden.
WRPAC: het certificaat van de Verifier
Om een verificatieverzoek te doen, heeft de Relying Party een WRPAC (Wallet Relying Party Access Certificate) nodig. Dit certificaat, gedefinieerd in ETSI TS 119 475:
- identificeert de Relying Party bij de wallet
- specificeert welke attributen de RP mag opvragen
- wordt uitgegeven door een gekwalificeerde vertrouwensdienstverlener
- moet worden gevalideerd tegen de EU Trusted Lists
De wallet controleert het WRPAC voordat het toestemmingsscherm wordt getoond. Als het certificaat ongeldig, verlopen of niet in de trust list opgenomen is, weigert de wallet het verzoek.
EU Trusted Lists
De EU beheert een hiërarchische vertrouwensinfrastructuur:
EU List of Trusted Lists (LOTL)
└── Country Trusted List (bijv. Luxembourg)
└── Trust Service Provider (bijv. LuxTrust)
└── Trust Service (bijv. WRPAC-uitgifte)
└── Certificate (uw WRPAC)
De SDK moet deze hiërarchie doorlopen om te valideren dat een WRPAC-certificaat is uitgegeven door een legitieme aanbieder in een erkende lidstaat. Dit is een van de complexste onderdelen van de implementatie -- het trust-list-formaat (XML/JSON) heeft eigen parsingvereisten, en lijsten worden onafhankelijk bijgewerkt door elke lidstaat.
Privacy by design
OpenID4VP dwingt privacy af op protocolniveau:
- Selective Disclosure: de holder kiest exact welke attributen worden gedeeld. Vragen om
age_over_18onthult niet de geboortedatum. - Geen correlatie: elke verificatiesessie gebruikt vers cryptografisch materiaal, waardoor verifiers sessies niet aan elkaar kunnen koppelen.
- Toestemming van de holder: elk attribuutverzoek vereist expliciete goedkeuring van de gebruiker op het apparaat.
- Dataminimalisatie: het protocol moedigt aan om alleen te vragen wat nodig is. De wallet-UI maakt overmatige verzoeken zichtbaar voor gebruikers.
Dit verschilt fundamenteel van traditionele KYC, waarbij bedrijven vaak meer data ontvangen (en opslaan) dan nodig is.
Hoe OpenEUDI dit implementeert
De OpenEUDI SDK is opgebouwd in lagen. Het pakket @openeudi/openid4vp implementeert credential-parsing met een eenvoudige API: parsePresentation(vpToken) detecteert automatisch het credentialformaat (SD-JWT of mDOC), valideert cryptografische signatures en geeft geverifieerde claims terug.
import { parsePresentation } from '@openeudi/openid4vp';
// Automatically handles both SD-JWT and mDOC formats
const result = await parsePresentation(vpToken);
// result.format — 'sd-jwt' | 'mdoc'
// result.claims — verified, selectively disclosed attributes
De hogerliggende VerificationService bouwt hierop voort om de volledige levenscyclus van een sessie te beheren:
import { VerificationService } from '@openeudi/core';
const service = new VerificationService({
mode: 'production',
wrpac: {
certificate: process.env.WRPAC_CERT,
privateKey: process.env.WRPAC_KEY,
},
trustList: {
lotlUrl: 'https://ec.europa.eu/tools/lotl/eu-lotl.xml',
refreshInterval: 86400, // 24 hours
},
});
Intern doet de SDK het volgende:
- Stelt een spec-conforme Authorization Request samen
- Codeert deze in een QR-code (met configureerbare styling)
- Zet een response-endpoint op voor de VP van de wallet
- Delegeert aan
@openeudi/openid4vpom de VP te parsen en te valideren (SD-JWT of mDOC) - Controleert het certificaat van de issuer tegen de EU Trusted Lists
- Extraheert en geeft alleen de opgevraagde attributen terug
- Ruimt cryptografisch materiaal op uit het geheugen
Dit alles gebeurt achter service.createSession() en session.onVerified().
Grensoverschrijdende compliance
Elke EU-lidstaat heeft enige beleidsvrijheid over welke attributen onder welke voorwaarden mogen worden opgevraagd. Bijvoorbeeld:
- Leeftijdsdrempels voor verificatie variëren per productcategorie en land
- Sommige landen beperken bepaalde attribuutopenbaarmakingen
- Nationale wallet-implementaties kunnen verschillende credentialschema's gebruiken
OpenEUDI bevat een machine-leesbare compliance-mapping (JSON) voor alle 27 lidstaten, zodat ontwikkelaars de beschikbaarheid van attributen kunnen controleren voordat ze een verzoek doen.
Wat volgt voor het protocol
De OpenID4VP-specificatie blijft evolueren via de werkgroep van de OpenID Foundation. Belangrijke gebieden van actieve ontwikkeling:
- Presentation Exchange 2.0 -- flexibelere manieren om aan te geven welke credentials aanvaardbaar zijn
- Status assertions -- realtime controle op intrekking van credentials
- Verbeteringen aan cross-device-stromen -- betere UX voor verificatie tussen mobiel en desktop
- Batch verification -- meerdere credentials verifiëren in één stroom
OpenEUDI zal deze wijzigingen volgen met een versioned protocol adapter pattern, zodat de publieke API stabiel blijft terwijl interne handlers per specificatierevisie worden bijgewerkt.
OpenEUDI implementeert OpenID4VP voor het EUDI Wallet-ecosysteem. De SDK is MIT-gelicentieerd en gratis te gebruiken. Voor productie-implementaties met beheerde WRPAC-certificaten, zie de managed plannen van eIDAS Pro.
Gerelateerde artikelen
OpenEUDI SDK Snelstart: uw eerste verificatie in 5 minuten
Een stapsgewijze handleiding om de OpenEUDI SDK te installeren, een verificatiesessie aan te maken en het resultaat te verwerken — allemaal in minder dan 5 minuten met DEMO-modus.
6 min leestijd
Hoe eIDAS-verificatie werkt: een technische deep dive
Een uitgebreide technische uitsplitsing van de eIDAS-verificatieflow, van QR-codegeneratie tot attribuutvalidatie, met protocollen, beveiligingsmaatregelen en integratiepatronen.
12 min leestijd
Dit artikel delen
Help anderen meer te weten komen over eIDAS-verificatie