Signature électronique
L'objet signature ajoute une signature numérique cryptographique au PDF et au DOCX générés. Les signatures fournissent la non-répudiation et la détection de falsification : toute modification du fichier signé invalide la signature.
Propriétés
| Propriété | Type | Défaut | Description |
|---|---|---|---|
fieldName | string | — | Nom du champ de formulaire de signature |
position | object | — | Position fixe sur la page (voir ci-dessous) |
appearance | object | — | Apparence visuelle du bloc de signature |
signatureCreator | string | — | Nom de l'application enregistrée comme créateur de signature |
signingType | string | "PAdES" | Norme de signature : PAdES ou Detached |
certificate | string | — | La clé de signature : un fichier PKCS#12 (.p12/.pfx) par son chemin (certs/signer.p12), ou le nom d'une clé que vous gardez dans votre propre coffre (contracts). Obligatoire |
password | string | — | Le mot de passe du fichier de certificat ; absent ou vide, c'est le mot de passe vide. Une clé de votre propre coffre n'en prend aucun |
contactInfo | string | — | Informations de contact du signataire |
timestampServer | string | — | URL d'une autorité d'horodatage RFC 3161 (optionnel) |
visible | boolean | true | Si le bloc de signature est visible sur la page |
claimedSignDate | string | heure de génération | L'heure de signature que le signataire affirme, en date et heure ISO 8601 (2026-09-01T14:30:00Z) |
digest | string | "sha256" | L'empreinte sur laquelle la signature est calculée : sha256, sha384 ou sha512 |
certificationLevel | string | "noChanges" | Quelles modifications sont autorisées après la signature |
fieldLock | object | — | Verrouiller les champs de formulaire spécifiques après la signature |
Où la clé est conservée
Téléversez le fichier PKCS#12 dans le dossier certs de votre espace de travail, puis nommez-le par ce chemin (certs/signer.p12) :
POST /v1/{tenantId}/assets/certs
Content-Type: multipart/form-data
file: signer.p12
Le dossier accepte les fichiers .p12 et .pfx jusqu'à 64 Ko. Une clé est listée par son nom et peut être remplacée ou supprimée ; elle n'est jamais restituée. Un document dont la signature ne peut pas être apposée est refusé (SIGNATURE_NOT_APPLIED) : il n'est ni stocké ni comptabilisé.
Une clé gardée dans votre propre coffre
Une clé de signature peut rester dans un Azure Key Vault ou un HSM managé qui vous appartient. La plateforme ne la détient jamais : pour chaque signature, elle envoie une empreinte à votre coffre, qui renvoie la signature. Vous pouvez retirer cet accès à tout moment.
- Dans Paramètres, Clés de signature, copiez l'ID d'application (client) de la plateforme.
- Dans votre annuaire Microsoft Entra, consentez à cette application, puis attribuez-lui le rôle Key Vault Crypto User
sur la clé (ou une stratégie autorisant
signetget). - Sur la clé, dans votre coffre, définissez l'étiquette
docpayload-tenantavec l'ID de votre espace de travail, affiché dans Paramètres, Clés de signature. L'application est la même pour tous les clients de la plateforme : l'étiquette indique donc quel espace de travail signe avec votre clé. Une clé sans étiquette, ou liée à un autre espace de travail, n'est pas enregistrée. - Enregistrez la clé : un nom, l'identificateur de la clé avec sa version
(
https://{vault}.vault.azure.net/keys/{name}/{version}), l'ID de votre annuaire (locataire) et la chaîne de certificats en PEM, le certificat du signataire d'abord.
L'enregistrement lit l'étiquette de la clé, puis demande à votre coffre de signer une empreinte d'essai et vérifie la signature avec le certificat : une clé n'est donc enregistrée que si elle est liée à votre espace de travail, si la plateforme peut l'utiliser et si le certificat est bien celui de cette clé. Un document nomme ensuite la clé là où il nommerait un fichier, sans mot de passe :
{
"document": {
"signature": {
"certificate": "contracts",
"appearance": { "signedBy": "Contracts" }
},
"content": [{ "p": "Signé dans notre propre coffre." }]
}
}
Un nom se compose de lettres minuscules, de chiffres et de traits d'union : il n'est donc jamais confondu avec le chemin
d'un fichier. Une clé RSA signe sur l'empreinte demandée par le document ; une clé P-256, P-384 ou P-521 signe
respectivement sur SHA-256, SHA-384 ou SHA-512. Si le coffre ne signe pas au moment de générer un document, s'il signe
avec une autre clé que celle du certificat, ou si le certificat a expiré, le document est refusé
(SIGNATURE_NOT_APPLIED).
Types de signature
| Type | Description |
|---|---|
PAdES | Signature électronique avancée en PDF — intégrée dans le PDF selon ETSI EN 319 142. Recommandé pour la plupart des cas d'usage. |
Detached | Signature CMS/CAdES détachée — la signature est un objet CMS séparé. Utilisée quand l'interopérabilité avec les systèmes non-PDF est nécessaire. |
Position
L'objet position place le bloc de signature visible à un emplacement fixe.
| Propriété | Type | Défaut | Description |
|---|---|---|---|
pageNumber | number | 1 | Numéro de page basé sur 1 |
left | number | 100 | Distance du bord gauche en points |
bottom | number | 150 | Distance du bord inférieur en points |
width | number | 160 | Largeur du bloc de signature en points |
height | number | 50 | Hauteur du bloc de signature en points |
Apparence
L'objet appearance contrôle ce qui s'affiche dans le bloc de signature visible.
| Propriété | Type | Description |
|---|---|---|
signedBy | string | Nom du signataire affiché dans le bloc |
signDate | string | Chaîne de date affichée dans le bloc |
reason | string | Raison de la signature (par ex., « Approuvé », « Examiné ») |
location | string | Localisation du signataire (par ex., « Portland, OR ») |
image | object | Image optionnelle (par ex., signature scannée) avec src, width, height |
style | string | Style nommé du bloc de signature (voir ci-dessous) |
icon | string | Icône dans le coin supérieur droit du bloc : lock ou shield. Aucune par défaut |
certificateFingerprint | boolean | true ajoute une ligne avec le début de l'empreinte SHA-256 du certificat de signature |
svg | object | Un svg dessiné à droite du bloc : un sceau placé avec use, ou tout autre dessin (voir ci-dessous) |
Styliser le bloc
Sans style, le bloc est dessiné dans un cadre fin et sombre, en texte de 6pt, le nom du signataire en gras. Nommez un style de styles pour le changer ; le PDF et le DOCX dessinent le même bloc.
| Clé de style | Ce qu'elle règle |
|---|---|
fontSize | Taille des lignes |
color | Couleur des lignes |
fontWeight | bold met toutes les lignes en gras (le nom du signataire l'est toujours) |
border | Le cadre : son épaisseur et sa couleur, identiques sur les quatre côtés. Un style sans bordure ne dessine pas de cadre |
backgroundColor | Fond derrière les lignes ; une icône est dessinée dans cette couleur |
padding | Espace entre le cadre et ce que le bloc contient : une longueur pour tous les côtés, ou un côté à la fois avec paddingTop, paddingRight, paddingBottom et paddingLeft |
{
"styles": {
"seal": { "fontSize": 9, "color": "#1D4ED8", "border": "1.5pt solid #1D4ED8", "backgroundColor": "#EFF6FF", "padding": 6 }
},
"signature": {
"certificate": "certs/signer.p12",
"password": "certPassword",
"appearance": { "signedBy": "Lisa Thompson", "style": "seal", "icon": "lock", "certificateFingerprint": true }
}
}
Une ligne plus large que le bloc est coupée et signalée ; élargissez position.width ou réduisez fontSize.
Un sceau ou tout autre dessin
svg prend le même nœud svg que le contenu d'une page et le dessine dans le bloc, à droite, aussi haut que le bloc le permet ; les lignes gardent la place à sa gauche. Placez un composant de sceau avec use, avec ses propres paramètres :
{
"signature": {
"certificate": "certs/signer.p12",
"password": "certPassword",
"position": { "pageNumber": 1, "left": 58, "bottom": 110, "width": 330, "height": 120 },
"appearance": {
"signedBy": "Verdania Certification B.V.",
"reason": "Sealed as issued",
"svg": {
"viewBox": [132, 132],
"children": [
{ "use": { "name": "digital-eseal", "x": 0, "y": 0, "width": 132, "height": 132,
"params": { "title": "VERDANIA REGISTRY", "caption": "ELECTRONICALLY SEALED", "docid": "VC-27001-2026-04417" } } }
]
}
}
}
}
Une apparence avec un svg et sans lignes dessine le svg seul. Dans le PDF, le dessin fait partie du champ de signature lui-même ; dans le DOCX, il est dessiné au même endroit sur la page. Comme l'icône, c'est un dessin, qui ne dit rien de la validité de la signature. Un link sur l'une de ses formes n'est pas créé, et le rapport le signale : le bloc est un seul dessin, celui de la signature, et aucune de ses parties n'est un lien.
Icône et empreinte
icon dessine un cadenas (lock) ou un bouclier (shield) sur un petit onglet dans le coin supérieur droit du bloc, de la couleur du cadre. C'est une décoration : elle est identique que la signature soit valide ou non, et seul le panneau de signatures du lecteur l'indique.
certificateFingerprint ajoute une dernière ligne, Certificate SHA-256: suivie des huit premiers octets de l'empreinte du certificat de signature. Un lecteur peut la comparer à l'empreinte publiée par le titulaire du certificat. Comme toute ligne du bloc, c'est du texte dessiné, pas une preuve : c'est le panneau de signatures qui vérifie le document.
Niveaux de certification
| Niveau | Description |
|---|---|
noChanges | Par défaut : aucune modification autorisée après la signature |
formFilling | Seul le remplissage des champs de formulaire est autorisé |
annotating | Le remplissage des formulaires et les annotations sont autorisés |
unspecified | Aucune certification : une signature d'approbation |
Verrouillage des champs
L'objet fieldLock restreint les modifications des champs de formulaire après la signature.
| Propriété | Type | Description |
|---|---|---|
permissions | string | Ce qui peut encore changer une fois les champs verrouillés signés : noChanges, formFilling (le défaut) ou annotating, les mots de certificationLevel |
action | string | all (le défaut) verrouille tous les champs ; include verrouille ceux de fields, exclude tous les champs sauf ceux-là |
fields | string[] | Les noms des champs que include verrouille ou qu'exclude laisse libres ; obligatoire pour les deux, refusé à côté de all |
Dans un DOCX
Un DOCX est signé à partir du même objet signature, avec la même clé et le même condensé : tout le fichier est signé par une signature de paquet Office Open XML (XML Signature avec XAdES), et timestampServer y ajoute un horodatage. Une signature visible est dessinée dans le même cadre, avec le même signataire, motif, lieu et date.
Une signature de paquet est rompue par toute modification du fichier, donc certaines clés n'ont pas d'équivalent. Chacune, si elle est définie, est signalée, et non appliquée :
| Clé | Pourquoi |
|---|---|
certificationLevel autre que noChanges, fieldLock | une signature de paquet n'admet aucune modification ultérieure |
signingType: "Detached" | le paquet est toujours signé sur place |
contactInfo, signatureCreator, claimedSignDate | une signature de paquet n'a pas d'entrée pour eux |
appearance.image | la signature visible est dessinée en texte |
fieldName nomme le champ de signature du PDF ; une signature de paquet n'en a pas.
Exemples
Signature visible basique
{
"document": {
"signature": {
"fieldName": "approval_sig",
"certificate": "certs/signer.p12",
"password": "certPassword",
"signingType": "PAdES",
"signatureCreator": "DocPayload",
"contactInfo": "legal@company.com",
"visible": true,
"position": {
"pageNumber": 1,
"left": 350,
"bottom": 50,
"width": 200,
"height": 60
},
"appearance": {
"signedBy": "Lisa Thompson",
"reason": "Approved",
"location": "Portland, OR"
}
},
"content": [
{ "p": "This document has been reviewed and approved." }
]
}
}
Signature invisible
{
"document": {
"signature": {
"fieldName": "integrity_sig",
"certificate": "certs/system.p12",
"password": "systemPass",
"signingType": "PAdES",
"signatureCreator": "DocPayload",
"visible": false,
"certificationLevel": "noChanges"
},
"content": [
{ "p": "This document is digitally signed for integrity verification." }
]
}
}
Signature avec serveur d'horodatage
{
"document": {
"signature": {
"fieldName": "timestamped_sig",
"certificate": "certs/signer.p12",
"password": "certPassword",
"signingType": "PAdES",
"signatureCreator": "DocPayload",
"timestampServer": "http://timestamp.digicert.com",
"visible": true,
"position": {
"pageNumber": 1,
"left": 50,
"bottom": 50,
"width": 200,
"height": 60
},
"appearance": {
"signedBy": "Automated System",
"reason": "Generated and signed",
"location": "Cloud"
}
},
"content": [
{ "p": "Signed with a trusted timestamp for long-term validation." }
]
}
}
Signature avec verrouillage de champs
{
"document": {
"signature": {
"fieldName": "final_approval",
"certificate": "certs/approver.p12",
"password": "approverPass",
"signingType": "PAdES",
"signatureCreator": "DocPayload",
"certificationLevel": "formFilling",
"fieldLock": {
"permissions": "formFilling",
"action": "all"
},
"visible": true,
"position": {
"pageNumber": 1,
"left": 350,
"bottom": 50,
"width": 200,
"height": 60
},
"appearance": {
"signedBy": "Final Approver",
"reason": "Final approval — all fields locked",
"location": "Head Office"
}
},
"content": [
{ "p": "After signing, no form fields can be modified." }
]
}
}