La signature électronique est souvent présentée comme un service coûteux, indispensable et exclusivement réservé aux plateformes spécialisées. Mais est-ce vraiment le cas ? 🤔 Chez SupraDev, nous avions besoin d’un système pour faire signer des conventions et générer des diplômes certifiés. Plutôt que de nous tourner vers des solutions coûteuses et standardisées, nous avons choisi de créer notre propre système de signature électronique.

Dans cet article, je partage notre approche, les outils utilisés, et comment nous avons conçu une solution personnalisée, économique et évolutive.


🚀 Le besoin initial : Pourquoi développer en interne ?

Pour répondre à nos besoins, il nous fallait un système capable de :

  1. Générer des documents dynamiques : Intégrer des données spécifiques dans un template.
  2. Faire signer les documents facilement : Collecter une signature de manière intuitive.
  3. Sécuriser les transactions et les documents : Vérifier l’identité du signataire et certifier l’authenticité des fichiers.

Plutôt que de souscrire à une solution prête à l’emploi, nous avons choisi de tirer parti des outils que nous utilisions déjà, comme Google Drive et SendInBlue, et de les combiner avec des librairies Node.js pour créer un système sur mesure.

L’objectif ? Une solution fiable, personnalisable et surtout sans abonnement récurrent.


🛠️ Les outils indispensables pour notre système

Voici les éléments clés que nous avons utilisés pour développer notre solution :

📄 Gestion des documents avec Google

  • Google Docs : Créez un template avec des balises dynamiques ({{ clé }}) pour personnaliser les documents.
  • Google Drive : Stockez, dupliquez et modifiez les documents via l’API Google.
  • googleapis : Cette librairie Node.js permet d’interagir avec les API Google pour manipuler les documents.

✍️ Capture de signature avec SignPad

  • SignPad : Une librairie JavaScript légère pour capturer des signatures via un navigateur, idéal pour les écrans tactiles.

🔒 Sécurité et certification

  • SendInBlue : Utilisé pour envoyer un SMS contenant un code unique, validant l’identité du signataire.
  • node-signpdf : Une pépite pour appliquer un tampon numérique sur les PDF, en utilisant un certificat SSL converti en P12.
  • HTTPS obligatoire : Sécurisez toutes les communications et garantissez la confidentialité des données transmises.

🗃️ Base de données pour la persistance

  • MongoDB : Stockez les informations des utilisateurs, des documents et des transactions.

Avec ces outils, nous avons pu concevoir un processus fluide, sécurisé et entièrement automatisé.


🔧 Fonctionnement du système

Étape 1 : Génération du document

Lorsqu’un utilisateur souhaite signer un document, notre système :

  1. Duplique un template Google Docs sur notre Drive.
  2. Remplace les balises dynamiques ({{ clé }}) par les informations personnalisées de l’utilisateur (nom, email, etc.).
  3. Génère un identifiant unique pour le document, sauvegardé en base.
  4. Envoie un email à l’utilisateur contenant un lien vers l’interface de signature.

generate-document.avif


Étape 2 : Signature et certification

L’utilisateur accède à l’interface de signature via le lien reçu. Sur cette page :

  • Il peut visualiser le document généré.
  • Il signe directement avec SignPad.
  • Si la validation par SMS est activée, il saisit le code reçu pour confirmer son identité.

Une fois la signature capturée :

  1. Le document est modifié pour intégrer la signature à l’emplacement prévu ({{ sign }}).
  2. Un PDF est généré, tamponné avec un certificat numérique pour garantir son authenticité.
  3. Le fichier final est envoyé par email à l’utilisateur, accompagné d’une preuve de délivrance.

electronic-sign.avif


🔒 Sécurité et conformité

La sécurité est un élément crucial pour un tel système :

  • Signature temporaire : La signature de l’utilisateur est temporairement exposée sur un service sécurisé HTTPS pour être intégrée au document. Elle est immédiatement supprimée une fois le processus terminé.
  • Anonymisation des données : Les informations utilisateur (email, téléphone) sont anonymisées après la signature pour respecter la confidentialité.
  • Tampon numérique : Chaque document est certifié avec une signature numérique, incluant un horodatage pour attester de son authenticité.

Pour aller plus loin, vous pouvez implémenter un système permettant de vérifier ultérieurement l’origine et la validité des documents signés.


⚙️ Le projet en pratique

Pour les curieux ou ceux qui souhaitent s’inspirer de notre solution, nous avons partagé un exemple fonctionnel sur Github. Voici les principales fonctionnalités :

  • [POST] /generate-document : Crée un document personnalisé à partir d’un template.
  • [GET] /sign/:id : Fournit une interface de signature à l’utilisateur.
  • [POST] /sign/:id : Intègre la signature et génère un PDF certifié.

📂 Accédez au projet ici : Github - Electronic Signature System


🏁 Conclusion

Avec un peu de réflexion et les bons outils, il est possible de créer un système de signature électronique fiable et économique. Chez SupraDev, nous avons relevé ce défi pour répondre à nos besoins spécifiques, et nous espérons que cet article vous inspirera à faire de même.

N’hésitez pas à me contacter sur LinkedIn pour discuter de votre projet ou échanger sur des améliorations possibles. Et surtout, amusez-vous à coder ! 🚀

Un grand merci à Laurent Chevrier pour son aide à la relecture. 😄

Julien Moulin

Fondateur & Formateur Js/Ts

Julien Moulin est un expert en développement full stack (JS/TS) et un leader technique reconnu. Il excelle dans l'adoption de technologies innovantes tout en répondant aux besoins clients. Son approche allie pragmatisme et innovation, avec une expertise couvrant les plateformes e-commerce, les applications métiers et la modernisation des architectures existantes. En mentor passionné, il partage ses connaissances avec pédagogie, encourage l’apprentissage continu, et inspire ses équipes à relever des défis ambitieux.

Je veux coder ça moi aussi