OpenID4VP begrijpen: het protocol achter de EU Digital Identity Wallets

Een technische verdieping in OpenID4VP — het verificatieprotocol dat EUDI Wallets gebruiken om geverifieerde attributen te delen met bedrijven. Hoe het werkt, waarom het ertoe doet, en hoe OpenEUDI het implementeert.

eIDAS Pro Team
22 maart 2026
12 min leestijd

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:

  1. Issuer -- de overheid of vertrouwde autoriteit die het credential heeft uitgegeven (bijv. de Oostenrijkse overheid die een nationale ID uitgeeft)
  2. Holder -- de burger met de EUDI Wallet op zijn telefoon
  3. Verifier (Relying Party) -- het bedrijf dat de verificatie aanvraagt (uw webshop, KYC-systeem, enz.)
  4. 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_18 onthult 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:

  1. Stelt een spec-conforme Authorization Request samen
  2. Codeert deze in een QR-code (met configureerbare styling)
  3. Zet een response-endpoint op voor de VP van de wallet
  4. Delegeert aan @openeudi/openid4vp om de VP te parsen en te valideren (SD-JWT of mDOC)
  5. Controleert het certificaat van de issuer tegen de EU Trusted Lists
  6. Extraheert en geeft alleen de opgevraagde attributen terug
  7. 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

Dit artikel delen

Help anderen meer te weten komen over eIDAS-verificatie