QRCode signés

Aussi :

Le principe

Le connecteur aura pour objectif de produire des QRcode contenant une donnée signée électroniquement (un certificat électronique), lié ou non via un identifiant unique à un enregistrement en base pour permettre de valider l'origine de la donnée et d'éventuellement l'augmenter. Cette partie sera appelé le backend. Le connecteur fournira aussi une application Web style one-page application permettant la lecture, la validation, le pointage et l'augmentation des donnés d'un QRcode. Cette partie aura pour nom le fronted et visera une utilisation sur tablette et smartphone, i.e. la compatibilité minimale visée est Chrome Android et Safari iOS.

Fonctionnalités du backend

Fonctionnalités du front

Cas d'usage

ZFE

ZFE = Zone à faible émission, les collectivités émettent des autorisations particulières par exemple pour des artisans ayant de vieux véhicule polluant. On créera un certificat avec la plaque d'immatriculation et le date limite de validité, on conservera en base nom/prénom/téléphone/adresse de la personne.

Un jeton unique de lecture sera transmis à la police municipale, le lien vers le frontend sera transforme en QRcode URL et transmis aux agents (par mail, courrier, whatever) ils n'auront qu'à le lire avec leur téléphone/tablette.

La police municipale sera à même de valider le certificat et si en ligne de lire les informations supplémentaires qui ne seront pas publiquement dans les QRcode.

Contrôle d'accès à un évènement

Pour chaque billet vendu on créera un certificat avec le numéro de la place, zone d'accès, etc.. Des jetons seront produits pour chaque agent de sécurité et un lien vers le frontend contenant ce jeton fournit sous forme de QRcode à lire par le smartphone de l'agent.

Chaque smartphone à la validation d'un QRcode remontera l'évènement de pointage au backend, évènement qui redescendra dans les autres smartphones pout empêcher le double pointage.

Choix techniques

Modèle de donnée du connecteur

skinparam linetype ortho
skinparam class {
  BackgroundColor<<bloc de champs>> PaleGreen
  BackgroundColor<<workflow>> Red
}

title Modèle de donnée connecteur QRcode

ressource "1" -- "*" certificat
ressource "1" -- "*" lecteur
certificat "1" -- "*" "évènement"
"évènement" "*" -- "1" lecteur 

Class ressource {
  cles : list of nacl keys
}

Class certificat {
  guid : uuid
  not_after : datetime or null
  not_before : datetime or null
  data : json
  metadata : json
}

Class lecteur {
  guid : uuid
  not_after : datetime or null
  not_before : datetime or null
  metadata : json -- {'identifier': 'john.doe@example.com' or 'tel:00336343434' or 'Évènement X - Agent de sécurité 1'},
  pointage : bool
  metadata_access : list of metadata keys
}

Class "évènement" {
  date : datetime
  type : string -- "vu"
  lecteur : lecteur
  certificat : certificat
}

Prototype

Backend en ligne de commande limité à produire les QRcodes signés, frontend qui ne fait que lire.

https://git.entrouvert.org/entrouvert/misc-bdauvergne/src/branch/main/qrcode-certificate/v1

Plan développement :

Pour le 17 Novembre en recette, implémenter le cas d'usage "ZFE". i.e création d'un connecteur "qrcode" avec les endpoints suivants :

Le calendrier & les spécifications précises pour le pointage viendront après.