Passer au contenu principal
Didit lève 7,5 M$ pour bâtir l'infrastructure pour l'identité et la fraude
Didit
Retour au blog
Blog · 6 octobre 2026

Guide du vérificateur OpenID4VP : accepter le portefeuille EUDI

Fonctionnement d'un vérificateur OpenID4VP pour le portefeuille EUDI : objets de requête, requêtes DCQL, modes de réponse, contrôles SD-JWT VC et mdoc, règles HAIP en droit de l'UE, erreurs courantes et où tester.

Par DiditMis à jour le
openid4vp-verifier-cover.png

En bref

OpenID4VP (OpenID for Verifiable Presentations) est le protocole qu'un vérificateur utilise pour demander des attestations à un portefeuille numérique et recevoir en retour une présentation signée. La version 1.0 est devenue une OpenID Final Specification le 10 juillet 2025, et le portefeuille européen d'identité numérique (EUDI Wallet) l'utilise pour la présentation à distance.[2][3]

  • Vous envoyez une requête signée contenant une requête DCQL. Le portefeuille renvoie un VP Token.
  • Vous vérifiez vous-même la signature de l'émetteur, les divulgations, la liaison de clé et la révocation.
  • Pour le portefeuille EUDI, le droit de l'UE ajoute des règles de certificat et d'enregistrement.

Dernière révision : 5 octobre 2026 · Ceci n'est pas un avis juridique

OpenID4VP permet à un site web ou à une application de demander à un portefeuille de prouver un élément concernant une personne, comme un nom ou une date de naissance. Le vérificateur indique les attestations et les attributs qu'il souhaite. L'utilisateur donne son accord dans le portefeuille, puis le portefeuille renvoie une présentation que le vérificateur contrôle de manière cryptographique. Selon les termes mêmes de la spécification, elle « définit un protocole pour demander et présenter des Credentials ».[1]

Ce guide s'adresse aux développeurs qui construisent un vérificateur OpenID4VP pour le portefeuille EUDI : l'objet de requête, DCQL, les modes de réponse, les flux selon l'appareil, les contrôles SD-JWT VC et mdoc, les règles HAIP dans le droit de l'UE, les erreurs courantes et les environnements de test.

OpenID4VP en termes simples

OpenID4VP reprend la forme d'une requête d'autorisation OAuth 2.0. Le vérificateur demande le type de réponse vp_token, et une réponse réussie doit inclure un paramètre vp_token contenant les présentations.[1] Il n'y a ni code ni jeton d'accès à échanger : les données arrivent dans la réponse.

Le portefeuille authentifie la partie utilisatrice, vérifie qu'elle ne demande pas plus que ce qu'elle a enregistré, recueille l'accord de l'utilisateur et signe la présentation. La partie utilisatrice vérifie ensuite la signature de l'émetteur, le statut de révocation et la liaison à l'appareil.[3] Les données d'identification personnelle (PID) sont émises dans deux formats, SD-JWT VC et ISO/IEC mdoc. Les deux utilisent des empreintes salées, ce qui permet à l'utilisateur de partager certains attributs et de masquer les autres.[5][3]

  1. 10 juillet 2025Spécification finaleOpenID4VP 1.0 approuvé.
  2. 22 juillet 2026PublicationCIR 2026/1731 (adopté le 15 juillet 2026) au Journal officiel.
  3. 23 juillet 2026ARF v3.0.0Version actuelle de l'architecture.
  4. 24 décembre 2026PortefeuillesAu moins un par État membre.
  5. 24 décembre 2027AcceptationParties utilisatrices privées réglementées.

De la spécification finale à la date d'acceptation par le secteur privé.[2][3][4][5]

Fonctionnement d'un échange avec un vérificateur OpenID4VP

OpenID4VP publie une conception de référence pour le mode de réponse direct_post. Dans ce mode, le portefeuille envoie la réponse par POST à un point de terminaison serveur au lieu de la faire transiter par le navigateur.[1]

Navigateur de l'utilisateur Frontend du vérificateur Point de terminaison de réponse Portefeuille
1Lance la vérification
2Ouverture de la transaction
3Identifiants de transaction et de requête
4Requête avec nonce, DCQL

Le portefeuille vérifie le vérificateur, l'utilisateur donne son consentement

5POST du VP Token, state
6Redirection avec code de réponse
7Retour sur le site
8Récupération avec le code
9VP Token

La conception de référence direct_post d'OpenID4VP 1.0, section 13.3, simplifiée.[1]

  • Générez un nonce d'« au moins 16 octets nouveaux et aléatoires au sens cryptographique » pour chaque requête.
  • Envoyez au portefeuille le request-id issu du point de terminaison de réponse, en tant que state.
  • Renvoyez une URI de redirection avec un nouveau response_code une fois que le portefeuille a effectué son envoi.
  • Récupérez le VP Token avec le transaction-id et ce code, puis vérifiez le nonce.

Le response_code empêche la fixation de session, où un attaquant relaie votre requête vers le portefeuille d'une victime. La spécification précise qu'il n'aide pas entre appareils et recommande des mécanismes supplémentaires dans ce cas.[1]

Vidéo en attente : flow-eudi-openid4vp

Une présentation OpenID4VP depuis un portefeuille EUDI, du début à la fin.

L'objet de requête OpenID4VP et les identifiants client

Le client_id commence par un préfixe d'identifiant client (Client Identifier Prefix) qui indique au portefeuille comment authentifier le vérificateur.[1] Les requêtes volumineuses sont transmises par référence : le portefeuille récupère l'objet de requête signé depuis une request_uri. Pour les codes QR, la spécification recommande direct_post avec request_uri, car la requête « pourrait ne pas tenir dans un code QR ».[1]

PréfixeComment le portefeuille authentifie le vérificateurRequête signée
redirect_uriL'identifiant est l'URI de redirection ou de réponseNe peut pas être signée
x509_san_dnsNom DNS figurant dans le SAN du certificat feuilleObligatoire
x509_hashEmpreinte SHA-256 du certificat feuilleObligatoire
decentralized_identifierClé issue du document DIDObligatoire
verifier_attestationJWT d'attestation émis par un émetteur auquel le portefeuille fait confianceObligatoire
openid_federationChaîne de confiance de la fédérationSelon OpenID Federation

Préfixes d'identifiant client, OpenID4VP 1.0, section 5.9.[1]

Pour les vérificateurs EUDI, le droit de l'Union impose le préfixe : le certificat feuille « destiné à être utilisé avec le préfixe d'identifiant client x509_hash est un certificat d'accès de partie utilisatrice tel que spécifié dans ETSI TS 119 475 », et un élément de verifier_info « comprend le certificat d'enregistrement ».[5]

Requêtes DCQL : demandez ce que vous avez enregistré

Le Digital Credentials Query Language (DCQL) est la requête JSON qui désigne les attestations et les attributs que vous demandez. Elle contient un tableau credentials obligatoire et un tableau credential_sets facultatif. Chaque requête d'attestation exige un id, un format et un objet meta.[1] L'exemple SD-JWT VC de la spécification :[1]

{ "credentials": [ { "id": "my_credential", "format": "dc+sd-jwt", "meta": { "vct_values": [ "https://credentials.example.com/identity_credential" ] }, "claims": [ {"path": ["last_name"]}, {"path": ["first_name"]}, {"path": ["address", "street_address"]} ] } ] }

Pour un mdoc, le format est mso_mdoc et meta contient un doctype_value.[1] Pour le PID, remplacez par son type et ses noms d'attributs. Les attributs obligatoires du PID sont le nom de famille, le prénom, la date de naissance, le lieu de naissance et la nationalité.[7]

  • require_cryptographic_holder_binding vaut true par défaut. Conservez cette valeur : elle oblige le portefeuille à renvoyer une preuve de liaison de clé.[1]
  • trusted_authorities filtre seulement ce que le portefeuille propose. Les vérificateurs « doivent vérifier par eux-mêmes que l'émetteur d'une présentation reçue est de confiance ».[1]
  • Les parties utilisatrices « ne demandent pas aux utilisateurs de fournir des données autres que » celles qu'elles ont enregistrées, et le portefeuille le vérifie.[4][3]

Modes de réponse OpenID4VP

Le mode de réponse détermine comment le VP Token est renvoyé. La valeur par défaut pour vp_token est fragment, dans le fragment de l'URI de redirection.[1]

Mode de réponseDestination du VP TokenChiffré
fragmentFragment de l'URI de redirection, via le navigateurNon
direct_postHTTP POST vers le response_uriNon
direct_post.jwtHTTP POST d'un JWT chiffréOui
dc_apiRetour via la Digital Credentials APINon
dc_api.jwtIdentique, chiffréOui

Modes de réponse dans OpenID4VP 1.0.[1]

Avec direct_post, response_uri est obligatoire et redirect_uri doit être absent, sinon le portefeuille renvoie invalid_request.[1] L'EVO Wallet de la Moldavie, par exemple, documente OpenID4VP 1.0 avec direct_post.jwt dans un flux sur le même appareil, des mdoc ISO/IEC 18013-5 profilés selon OpenID4VC HAIP 1.0 et une IETF Token Status List pour la révocation.[11]

Même appareil, inter-appareils et Digital Credentials API

L'ARF énumère les combinaisons à distance prises en charge : OpenID4VP associé à un mécanisme de transmission fondé sur des redirections et des schémas d'URI personnalisés ; OpenID4VP ou ISO/IEC 18013-7 associé à la Digital Credentials API du W3C ; et, de manière facultative, ISO/IEC 18013-7 avec des redirections et des schémas d'URI personnalisés.[3]

Même appareil

Schéma d'URI personnalisé

  • Le navigateur transmet openid4vp:// au système d'exploitation
  • Le portefeuille s'ouvre sur le même téléphone

ARF 4.4.3.1

Inter-appareils

Code QR

  • L'ordinateur affiche un code QR à scanner
  • Exposé à l'hameçonnage et aux attaques par relais

ARF 4.4.3.1

API du navigateur

Digital Credentials API

  • Le navigateur transmet l'origine vérifiée
  • Activée par défaut dans Chrome 141

OpenID4VP, annexe A

Trois façons dont un portefeuille reçoit une requête OpenID4VP.[3][1][10]

L'ARF indique que les schémas d'URI personnalisés sont « déconseillés pour les flux inter-appareils » et désigne la Digital Credentials API comme alternative.[3] Via l'API, le portefeuille obtient l'origine du vérificateur telle qu'authentifiée par le navigateur, « ce qui est important pour la résistance à l'hameçonnage ».[1] La spécification du W3C est encore à l'état de projet.[9] Ce que l'utilisateur voit sur un téléphone :

Navigateur : example.com

Vérifiez votre identité

Ce site web demande vos informations à votre portefeuille.

1Le navigateur envoie une URI openid4vp:// au système d'exploitation.[3]

Portefeuille EUDI

Vérification de la requête

Le portefeuille s'ouvre et se connecte à la partie utilisatrice.

2Le portefeuille authentifie la partie utilisatrice et vérifie ce qu'elle a enregistré.[3]

Portefeuille EUDI

Choisir ce que vous partagez

  • Nom de famillePartagé
  • Date de naissancePartagée
  • AdresseNon partagée

Partager

3L'utilisateur approuve les attributs.[3]

Navigateur : example.com

Données reçues

4Le portefeuille envoie la réponse et renvoie l'utilisateur.[1]

Vérifier une présentation SD-JWT VC étape par étape

Une présentation SD-JWT VC contient le JWT signé par l'émetteur, les divulgations révélées par l'utilisateur et un Key Binding JWT. Le vérificateur « DOIT valider chaque présentation vérifiable individuelle » et rejeter toute présentation dont le nonce est incorrect.[1]

1Vérifier la signature de l'émetteur

La clé remonte à un fournisseur de PID ou d'attestations de confiance.

2Contrôler chaque divulgation

Le hachage de chacune correspond à un condensé du contenu signé.

3Vérifier le Key Binding JWT

Signature par la clé du détenteur ; le nonce et l'audience correspondent.

4Contrôler la révocation

Lire la liste de statuts de l'émetteur.

Tous les contrôles sont réussis

Oui

Utiliser les attributs divulgués

Non

Rejeter et proposer un autre parcours

Les contrôles du vérificateur sur une présentation SD-JWT VC.[1][3]

Signature de l'émetteur. L'ARF la place en premier parmi les contrôles de la partie utilisatrice. Les ancres de confiance proviennent des listes de confiance (ETSI TS 119 612) et des listes d'entités de confiance (ETSI TS 119 602).[3]

Divulgations. Le contenu signé contient un tableau _sd de condensés. Chaque divulgation se compose d'un sel, d'un nom d'attribut et d'une valeur, par exemple ["eluV5Og3gSNII8EYnsxA_A", "family_name", "Doe"].[1] Hachez chacune et retrouvez son condensé. En l'absence de correspondance, l'émetteur ne l'a pas signée.

Key Binding JWT. Lorsque le lien avec le détenteur est exigé, le portefeuille « DOIT renvoyer un SD-JWT avec un Key Binding JWT ». Son nonce doit être égal au nonce de votre requête et son aud à votre Client Identifier, ou, via la Digital Credentials API, à votre origine précédée de origin:.[1] L'exemple de la spécification :

{ "nonce": "n-0S6_WzA2Mj", "aud": "x509_san_dns:client.example.org", "iat": 1709838604, "sd_hash": "Dy-RYwZfaaoC3inJbLslgPvMp09bH-clYP_3qbRqtW4" }

Révocation. La partie utilisatrice vérifie que le fournisseur « n'a pas révoqué le PID ou l'attestation ».[3] L'EVO Wallet de la Moldavie, par exemple, documente une IETF Token Status List à cet effet.[11]

Remarque

Le portrait de la PID ne devient obligatoire qu'à partir du 11 août 2028. Ne prévoyez donc pas de comparaison faciale avec le portrait du portefeuille avant cette date.[5]

Les présentations mdoc via l'ISO/IEC 18013-7, en bref

Pour un mdoc, le VP Token contient un DeviceResponse de l'ISO/IEC 18013-5 encodé en base64url, qui « contient une signature ou un MAC sur le SessionTranscript », y compris une structure de handover OpenID4VP.[1] Ce handover lie le mdoc à votre requête, comme le nonce et l'audience lient un SD-JWT VC.

Attention

Le droit de l'UE applique « l'annexe C de l'ISO/IEC 18013-7:2025 » pour le mdoc via la Digital Credentials API.[5] L'ISO indique que l'édition 2024 de la 18013-7 est retirée et remplacée. Vérifiez donc quelle édition votre bibliothèque implémente.[8]

Notre comparatif SD-JWT VC et mdoc explique quand chaque format convient.

Ce que le profil HAIP ajoute pour les vérificateurs EUDI

Le High Assurance Interoperability Profile (HAIP) restreint les options d'OpenID4VP. L'ARF l'impose déjà pour l'émission et précise que son utilisation « est nécessaire pour garantir l'interopérabilité ».[3] Pour la présentation, le CIR 2026/1731 définit un « profil OpenID4VC-HAIP » et un « profil ISO/IEC-mdoc ».[5]

ExigencePour votre vérificateurSource
Certificat d'accèsSigner avec un certificat d'accès de partie utilisatrice x509_hash, ETSI TS 119 475CIR 2026/1731[5]
Certificat d'enregistrementL'inclure dans verifier_infoCIR 2026/1731[5]
EnregistrementS'enregistrer dans l'État où vous êtes établieIDAS, art. 5b(1)[4]
Contrôles du portefeuilleLes unités de portefeuille ne valident les certificats d'enregistrement qu'à partir du 11 août 2028. Ce n'est pas une date limite d'enregistrementCIR 2026/1731[5]

Le certificat d'enregistrement « décrit l'utilisation prévue de la partie utilisatrice et indique les attributs » qu'elle a enregistrés. Le règlement sur l'enregistrement s'applique à partir du 24 décembre 2026.[6] La date du 11 août 2028 ne concerne que le contrôle de ce certificat par le portefeuille, pas l'enregistrement.[5] L'Allemagne le résume ainsi : une organisation « reçoit un certificat d'accès et d'enregistrement pour l'organisation et le cas d'usage ».[12] Notre guide de la partie utilisatrice du portefeuille EUDI traite l'enregistrement en détail.

Erreurs courantes lors de la création d'un vérificateur OpenID4VP

ErreurCorrection
Nonces réutilisés ou trop courtsAu moins 16 octets aléatoires nouveaux par requête[1]
Aucun contrôle de l'audienceComparez aud à votre identifiant client ou à votre origine[1]
Demander des données non enregistréesConstruisez la requête DCQL à partir de votre enregistrement[4]
Codes QR à URI personnalisé entre appareilsPrivilégiez l'API Digital Credentials[3]
Faire confiance à trusted_authoritiesValidez vous-même l'émetteur à l'aide des listes de confiance[1]
Ignorer la révocationVérifiez le statut à chaque fois[3]
Signer avec le préfixe redirect_uriIl ne peut pas être signé ; utilisez x509_hash[1][5]

Le portefeuille est lui aussi facultatif : l'accès « n'est en aucune manière restreint ou rendu désavantageux » pour les personnes qui ne l'utilisent pas. Votre vérificateur coexiste donc avec un autre parcours.[4]

Ressources de test

Commencez par les logiciels de référence et les tests de conformité avant de tester avec les portefeuilles nationaux.

  • Exécutez les tests de conformité sur conformance.eudi.dev.[3]
  • Consultez la documentation de l'implémentation de référence sur docs.eudi.dev. Il s'agit de documentation, pas de tests.[3]
  • Étudiez le vérificateur de démonstration de la Banque nationale de Moldavie et son code source.[13]
  • Consultez le projet de spécification de l'API Digital Credentials avant de vous appuyer sur le parcours navigateur.[9]

Pour les dates qui fondent votre plan de test, consultez les échéances du portefeuille EUDI pour 2026 et 2027.

Comment Didit vous aide pour la vérification par portefeuille EUDI

L'acceptation du portefeuille EUDI arrive bientôt sur Didit. Elle figure sur notre feuille de route, alignée sur le calendrier du portefeuille EUDI, dans le même parcours que celui que vous utilisez aujourd'hui. En attendant, vous pouvez dès maintenant vérifier des personnes à distance.

Vous conservez vos obligations de partie utilisatrice. La documentation des portefeuilles montre comment les eID sont activées par pays.

Ce que Didit fournit

  • Les connexions par eID nationale et le parcours documentaire dans un seul workflow
  • Les preuves de chaque vérification

Ce qui reste de votre ressort

  • Votre enregistrement comme partie utilisatrice du portefeuille
  • La décision d'entrée en relation et vos politiques

Planifiez avec nous votre parcours vers le portefeuille EUDI

Indiquez-nous vos pays et votre cas d'usage, et commencez dès aujourd'hui avec les moyens d'identification électronique nationaux et les documents.

Contactez-nousCommencer gratuitementLire la documentation

Points clés

  • OpenID4VP 1.0 est une spécification finale OpenID depuis le 10 juillet 2025.
  • Envoyez une requête DCQL limitée par votre enregistrement, avec un nonce nouvellement généré.
  • Vérifiez la signature de l'émetteur, chaque divulgation, le Key Binding JWT et la révocation.
  • Les vérificateurs EUDI signent avec un certificat d'accès de partie utilisatrice x509_hash.
  • Les parties utilisatrices privées concernées acceptent le portefeuille d'ici le 24 décembre 2027.

Questions fréquentes

Qu'est-ce qu'OpenID4VP ?

OpenID for Verifiable Presentations est un protocole de demande et de présentation d'attestations. Le portefeuille renvoie des présentations signées dans un VP Token, sans code d'autorisation ni jeton d'accès à échanger. La version 1.0 est devenue une OpenID Final Specification le 10 juillet 2025.[1][2]

Le portefeuille EUDI utilise-t-il OpenID4VP ?

Oui, pour la présentation à distance, aux côtés de l'ISO/IEC 18013-7. Le droit de l'UE définit un profil OpenID4VC-HAIP et un profil ISO/IEC-mdoc.[3][5]

Qu'est-ce que DCQL ?

Le Digital Credentials Query Language est la requête JSON qui désigne les attestations et les attributs demandés par un vérificateur. Le portefeuille renvoie les présentations correspondantes. Pour le portefeuille EUDI, ne demandez que les attributs que vous avez enregistrés.[1][4]

Quel mode de réponse un vérificateur EUDI doit-il utiliser ?

Un vérificateur côté serveur utilise direct_post ou la variante chiffrée direct_post.jwt. Via la Digital Credentials API, les modes sont dc_api et dc_api.jwt.[1]

Comment vérifier le Key Binding JWT ?

Vérifiez sa signature avec la clé liée dans l'attestation, puis vérifiez son nonce et son audience par rapport à votre requête. Via la Digital Credentials API, l'audience est votre origine.[1]

Quel préfixe d'identifiant client les vérificateurs EUDI utilisent-ils ?

x509_hash, avec un certificat d'accès de partie utilisatrice conforme à l'ETSI TS 119 475. Le certificat d'enregistrement figure dans verifier_info.[5]

Puis-je utiliser un QR code entre appareils ?

Oui, mais l'ARF ne recommande pas les schémas d'URI personnalisés entre appareils, en raison des attaques par hameçonnage et par relais. Il désigne la Digital Credentials API comme alternative.[3]

Puis-je comparer un visage au portrait du portefeuille ?

Pas de manière fiable pour l'instant. Le portrait ne devient une donnée PID obligatoire qu'à partir du 11 août 2028.[5]

Où puis-je tester un vérificateur OpenID4VP ?

Lancez les tests de conformité sur conformance.eudi.dev et consultez la documentation de l'implémentation de référence sur docs.eudi.dev. La Banque nationale de Moldavie a aussi publié un vérificateur de démonstration avec son code source.[3][13]

Sources

  1. OpenID for Verifiable Presentations 1.0, OpenID Foundation, spécification finale.
  2. OpenID for Verifiable Presentations 1.0 Final Specification Approved, OpenID Foundation, 10 juillet 2025.
  3. Architecture and Reference Framework v3.0.0, eu-digital-identity-wallet sur GitHub, publication du 23 juillet 2026.
  4. Règlement (UE) 2024/1183 (eIDAS 2), EUR-Lex, Journal officiel du 30 avril 2024.
  5. Règlement d'exécution (UE) 2026/1731 de la Commission, EUR-Lex, Journal officiel du 22 juillet 2026.
  6. Règlement d'exécution (UE) 2025/848 de la Commission relatif à l'enregistrement des parties utilisatrices de portefeuille, EUR-Lex, Journal officiel du 7 mai 2025.
  7. Règlement d'exécution (UE) 2024/2977 de la Commission relatif aux données d'identification personnelle, EUR-Lex, Journal officiel du 4 décembre 2024.
  8. ISO/IEC 18013-7, page de la norme ISO.
  9. Digital Credentials, projet du W3C.
  10. Digital Credentials API shipped, Chrome for Developers.
  11. Guide du développeur EVO Wallet, gouvernement de Moldavie, egov4dev.
  12. FAQ sur le portefeuille EUDI, eudi-wallet.gov.de.
  13. Vérificateur de démonstration BNM, gouvernement de Moldavie, egov4dev.

OpenID4VP est la partie du portefeuille EUDI que les développeurs manipulent le plus, et elle est assez stable pour développer dessus. Découvrez comment Didit aborde l'acceptation des portefeuilles sur la page de la solution portefeuille EUDI, et la vue d'ensemble dans notre présentation d'eIDAS 2.

Vérifiez les personnes à distance pendant le déploiement des portefeuilles

Utilisez dès maintenant les eID nationales et la vérification par document, et parlez-nous du portefeuille EUDI.

Commencer gratuitementNous contacter

Infrastructure pour l'identité et la fraude.

Une seule API pour le KYC, le KYB, la surveillance des transactions et le screening de portefeuilles. Intégration en 5 minutes.

Demande à une IA de résumer cette page