Démarrage rapide du SDK OpenEUDI : votre première vérification en 5 minutes

Un tutoriel pas à pas pour installer le SDK OpenEUDI, créer une session de vérification et traiter le résultat, le tout en moins de 5 minutes avec le mode DEMO.

Équipe eIDAS Pro
24 mars 2026
6 min de lecture

Prérequis

  • Node.js 20+ installé
  • Un projet TypeScript (ou JavaScript avec ESM)
  • Un terminal et votre éditeur préféré

C'est tout. Pas de clés API, pas d'inscription, pas de certificat WRPAC. Le mode DEMO fonctionne immédiatement.

Étape 1 : installer

npm install @openeudi/core

Ou avec votre gestionnaire de paquets préféré :

pnpm add @openeudi/core
yarn add @openeudi/core

Étape 2 : créer un vérificateur

import { VerificationService, DemoMode, InMemorySessionStore } from '@openeudi/core';
const service = new VerificationService({
  mode: new DemoMode(),
  store: new InMemorySessionStore(),
});

L'option mode contrôle le comportement du SDK :

ModeComportementCas d'usage
new DemoMode()Se termine automatiquement après 3 secondesDémonstrations, showcases, landing pages
new MockMode()Simule les réponses du portefeuille avec des données configurablesTests d'intégration, pipelines CI/CD
new ProductionMode(config)Vérification réelle avec des portefeuilles EUDIVérifications en direct (nécessite un WRPAC, déc. 2026+)

Étape 3 : créer une session de vérification

const session = await service.createSession({ type: 'AGE' });

// session.qrCodeUrl contient une data URL pour l'image du QR code
// session.sessionId est l'identifiant unique de session
// session.deepLink sert aux flux mobile-vers-mobile

Le tableau attributes précise ce que vous souhaitez vérifier. eIDAS Pro est conçu autour d'attributs booléens respectueux de la vie privée : vous obtenez une réponse oui/non, jamais des données personnelles brutes.

AttributRetourDescription
age_over_18BooléenL'utilisateur a-t-il 18 ans ou plus ?
age_over_21BooléenL'utilisateur a-t-il 21 ans ou plus ?
age_over_16BooléenL'utilisateur a-t-il 16 ans ou plus ?
age_over_14BooléenL'utilisateur a-t-il 14 ans ou plus ?

La conformité pays (quels pays sont autorisés) se configure dans vos paramètres marchand sous forme de liste blanche ou noire. Le SDK applique ensuite cette logique automatiquement, sans demander de données personnelles à l'utilisateur.

Note : en mode DEMO, les attributs renvoient des données synthétiques. En mode PRODUCTION, le portefeuille prouve cryptographiquement le booléen sans révéler la date de naissance sous-jacente.

Étape 4 : afficher le QR code

La session inclut un QR code que l'utilisateur scanne avec son application portefeuille EUDI.

// Dans un contexte web
const img = document.createElement('img');
img.src = session.qrCodeUrl;
document.getElementById('qr-container').appendChild(img);

// En React
function VerificationQR({ session }) {
  return <img src={session.qrCodeUrl} alt="Scannez avec votre portefeuille EUDI" />;
}

// En Next.js (avec next/image)
import Image from 'next/image';
function VerificationQR({ session }) {
  return <Image src={session.qrCodeUrl} alt="Scannez avec votre portefeuille EUDI" width={256} height={256} />;
}

Étape 5 : écouter le résultat

// API orientée événements (recommandée pour les applications web)
service.on('verified', (result) => {
  console.log('Vérification réussie !');
  console.log('Vérifié :', result.verified);     // true
  console.log('Pays autorisé :', result.countryAllowed); // true (selon votre liste blanche)
  console.log('ID de session :', result.sessionId);
  console.log('Horodatage :', result.verifiedAt);
});

service.on('failed', (error) => {
  console.log('Échec de la vérification :', error.reason);
  // 'timeout' | 'rejected' | 'invalid_credential' | 'network_error'
});

service.on('expired', () => {
  console.log('Session expirée - générez un nouveau QR code');
});

Ou utilisez l'API basée sur les promesses :

try {
  const result = await session.waitForResult({ timeout: 120000 }); // timeout de 2 min
  console.log('Vérifié :', result.verified);
} catch (error) {
  console.log('Échec ou délai dépassé :', error.reason);
}

Exemple complet : route API Express.js

import express from 'express';
import { VerificationService, DemoMode, InMemorySessionStore } from '@openeudi/core';
const service = new VerificationService({
  mode: new DemoMode(),
  store: new InMemorySessionStore(),
});

const app = express();

// Créer une nouvelle session de vérification
app.post('/api/verify', async (req, res) => {
  const session = await service.createSession({ type: 'AGE' });

  res.json({
    sessionId: session.sessionId,
    qrCode: session.qrCodeUrl,
  });
});

// Vérifier l'état de la session (ou utiliser SSE pour le temps réel)
app.get('/api/verify/:sessionId', async (req, res) => {
  const status = await service.getSessionStatus(req.params.sessionId);
  res.json(status);
});

// Point SSE pour les mises à jour en temps réel
app.get('/api/verify/:sessionId/events', (req, res) => {
  res.setHeader('Content-Type', 'text/event-stream');
  res.setHeader('Cache-Control', 'no-cache');
  res.setHeader('Connection', 'keep-alive');

  service.on('verified', (result) => {
    res.write(`data: ${JSON.stringify({ type: 'verified', result })}\n\n`);
    res.end();
  });

  service.on('failed', (error) => {
    res.write(`data: ${JSON.stringify({ type: 'failed', error })}\n\n`);
    res.end();
  });
});

app.listen(3000, () => console.log('Server running on port 3000'));

Que se passe-t-il en mode DEMO ?

Quand vous exécutez ce code en mode DEMO :

  1. Un QR code est généré, visuellement identique à un vrai
  2. Après 3 secondes, la session se termine automatiquement
  3. Des données de vérification synthétiques sont renvoyées (age_over_18: true, countryAllowed: true)
  4. Votre callback onVerified est déclenché avec le résultat

Aucun portefeuille réel n'est impliqué. Vous pouvez ainsi construire et tester tout le flux UI et backend avant le lancement des portefeuilles EUDI.

Étapes suivantes

  • Passez au mode MOCK pour tester des réponses configurables (succès, échec, timeout)
  • Ajoutez l'extension WooCommerce à votre boutique WordPress pour la vérification au moment du paiement
  • Lisez la référence API pour la configuration avancée (style des QR codes, options de session, gestion des erreurs)
  • Rejoignez les discussions GitHub pour signaler des problèmes ou proposer des fonctionnalités

Lorsque les portefeuilles EUDI seront lancés en décembre 2026, remplacez new DemoMode() par new ProductionMode(config) et ajoutez vos identifiants WRPAC, ou utilisez le service managé d'eIDAS Pro pour éviter la gestion des certificats.


OpenEUDI est sous licence MIT. Le SDK est actuellement en développement ; mettez le dépôt GitHub en favori pour être informé de la première publication.

Articles similaires

Partager cet article

Aidez les autres à en savoir plus sur la vérification eIDAS

Articles similaires

Technique

eu.europa.ec.av.1 expliqué : comment un vérificateur valide une attestation européenne de preuve d'âge avec la liste de confiance

L'application européenne de vérification d'âge remet à votre service un booléen signé dans l'espace de noms eu.europa.ec.av.1 — mais un booléen ne vaut que par la confiance accordée à celui qui l'a signé. Voici ce que contient cet espace de noms, et comment un vérificateur prouve que l'attestation est authentique grâce à l'Age Verification Trusted List.

8 min de lecture
Technique

Valider la preuve d'âge par rapport à la liste de confiance de l'UE : l'étape que tout le monde saute

Recevoir une attestation de preuve d'âge n'équivaut pas à lui faire confiance. Les recommandations relatives au vérificateur de l'UE imposent de valider chaque preuve d'âge par rapport à l'Age Verification Trusted List avant d'accorder l'accès. La Commission héberge déjà une liste de test dans l'environnement ACC du tableau de bord eIDAS — et ce n'est pas la même liste que celle des fournisseurs WRPAC.

9 min de lecture
Technique

Intégrer l'attestation de preuve d'âge de l'UE : guide du développeur sur l'espace de noms eu.europa.ec.av.1

L'émetteur de vérification d'âge de l'UE délivre une attestation « Proof of Age » au format mso_mdoc dans l'espace de noms eu.europa.ec.av.1, via OpenID4VCI. Voici ce que cet espace de noms contient réellement, comment fonctionne l'émission, et comment pointer votre intégration vers l'émetteur de référence en ligne — avec la réserve qu'il s'agit d'une référence, et non d'un point d'accès de production.

11 min de lecture