Passer à la navigation

Signature XAdES détachée avec Manifest

Afficher en Markdown

Exemple de requête réalisant une signature XAdES détachée avec Manifest sur un document

Création de la requête provisionnée

L’application demandeuse initie une demande de signature :

POST /api/requests HTTP/1.1
Authorization: ApiKey ELyx8gbdteZ9s4gigTAm4PQGvHu1zrA7
Content-Type: application/json
Content-Length: 158
{
"params" : {
"signerEmail" : "john.doe@my-idp.com"
},
"profiles" : {
"default" : {
"signatureType" : "xadesDetachedManifest"
}
}
}

Un objet demande est renvoyé :

{
"clientId" : "01",
"created" : 1789468052662,
"id" : "req_01_EQWuZa9Uz5vwVfraMRiz2uF6",
"params" : {
"bypassViewer" : "false",
"signerEmail" : "john.doe@my-idp.com"
},
"profiles" : {
"default" : {
"forceScrollDocument" : "false",
"signatureType" : "xadesDetachedManifest"
}
},
"status" : "created",
"updated" : 1789468052662
}

Téléversement du document à signer

L’application demandeuse téléverse le contenu du document (un PDF) :

POST /api/requests/req_01_EQWuZa9Uz5vwVfraMRiz2uF6/profiles/default/documents HTTP/1.1
Authorization: ApiKey ELyx8gbdteZ9s4gigTAm4PQGvHu1zrA7
Content-Disposition: attachment; filename="document.pdf"
Content-Type: application/pdf
%PDF-1.3
%[contenu binaire du fichier PDF]

Un objet document est renvoyé, avec cette fois une policyUri pointant vers la politique de signature CAdES/XAdES détachée de la Banque de France.

{
"created" : 1789468052712,
"displayedParts" : [ {
"contentType" : "application/pdf",
"filename" : "document.pdf",
"hash" : "obcUcumzUOJsClVDv/jHTNefKTRlTJULnZx4dfOrx+I=",
"name" : "data",
"policyUri" : "https://sites.banque-france.fr/igc/signature/ps/ps_1_2_250_1_115_200_300_4.pdf",
"profileId" : "default",
"size" : 12341
} ],
"id" : "doc_5JPx1PayrPNs3FyjSPTV5qbb",
"parts" : [ {
"contentType" : "application/pdf",
"filename" : "document.pdf",
"hash" : "obcUcumzUOJsClVDv/jHTNefKTRlTJULnZx4dfOrx+I=",
"name" : "data",
"policyUri" : "https://sites.banque-france.fr/igc/signature/ps/ps_1_2_250_1_115_200_300_4.pdf",
"profileId" : "default",
"size" : 12341
} ],
"profileId" : "default",
"requestId" : "req_01_EQWuZa9Uz5vwVfraMRiz2uF6",
"workflowIdx" : 0
}

Lancement de la requête provisionnée

L’application demandeuse passe le statut de la demande de signature à started :

POST /api/requests/req_01_EQWuZa9Uz5vwVfraMRiz2uF6/start HTTP/1.1
Authorization: ApiKey ELyx8gbdteZ9s4gigTAm4PQGvHu1zrA7

L’URL de la page de consentement est renvoyée :

{
"consentPageUrl" : "https://evidence-manager.lex-persona.com/?requestToken=eyJhbGciOiJIUzI1NiJ9.eyJjbGllbnRJZCI6IjAxIiwiY29uc2VudFZlcnNpb24iOiJWMiIsInNhbHQiOiJLKytlTmYzciIsInJtVmVyc2...#requestId=req_01_EQWuZa9Uz5vwVfraMRiz2uF6"
}

Récupération des documents signés et des preuves

L’application demandeuse liste les documents signés :

GET /api/requests/req_01_EQWuZa9Uz5vwVfraMRiz2uF6/signedDocuments/doc_3mUGMFSUbdezHkuaeSWmBmGH HTTP/1.1
Authorization: ApiKey ELyx8gbdteZ9s4gigTAm4PQGvHu1zrA7

Une liste d’objets document est renvoyée. Elle contient deux parties distinctes :

  • le document PDF d’origine (isOriginal: true),
  • un fichier signature.xml séparé contenant la signature XAdES détachée qui référence le PDF par son nom de fichier
[ {
"created" : 1789468053569,
"displayedParts" : [ {
"contentType" : "application/pdf",
"filename" : "document.pdf",
"hash" : "obcUcumzUOJsClVDv/jHTNefKTRlTJULnZx4dfOrx+I=",
"isOriginal" : true,
"name" : "data",
"policyUri" : "https://sites.banque-france.fr/igc/signature/ps/ps_1_2_250_1_115_200_300_4.pdf",
"profileId" : "default",
"size" : 12341
}, {
"contentType" : "text/xml",
"filename" : "signature.xml",
"hash" : "bv0w6D0vvf0JR6KqvDt1ods9pgcwHYHn+iX51VG4p6k=",
"isOriginal" : false,
"name" : "data",
"policyUri" : "https://sites.banque-france.fr/igc/signature/ps/ps_1_2_250_1_115_200_300_4.pdf",
"profileId" : "default",
"size" : 27176
} ],
"id" : "doc_45PZ7CFvAd9XpZCWW9JgKw6Z",
"linkedDocumentId" : "doc_5JPx1PayrPNs3FyjSPTV5qbb",
"parts" : [ {
"contentType" : "application/pdf",
"filename" : "document.pdf",
"hash" : "obcUcumzUOJsClVDv/jHTNefKTRlTJULnZx4dfOrx+I=",
"isOriginal" : true,
"name" : "data",
"policyUri" : "https://sites.banque-france.fr/igc/signature/ps/ps_1_2_250_1_115_200_300_4.pdf",
"profileId" : "default",
"size" : 12341
}, {
"contentType" : "text/xml",
"filename" : "signature.xml",
"hash" : "bv0w6D0vvf0JR6KqvDt1ods9pgcwHYHn+iX51VG4p6k=",
"isOriginal" : false,
"name" : "data",
"policyUri" : "https://sites.banque-france.fr/igc/signature/ps/ps_1_2_250_1_115_200_300_4.pdf",
"profileId" : "default",
"size" : 27176
} ],
"profileId" : "default",
"requestId" : "req_01_EQWuZa9Uz5vwVfraMRiz2uF6",
"workflowIdx" : 0
} ]

Le téléchargement du document signé renvoie le fichier signature.xml : une signature XAdES détachée (ds:Signature) qui référence document.pdf par son Manifest, avec sa politique de signature (celle de la Banque de France), sa chaîne de certificats et son horodatage, ainsi que l’entrée Manifest déclarant document.pdf par son URI :

GET /api/requests/req_01_H38sdXgMt75Y4WuwEL1YDcmY/signedDocuments/doc_MsvB2ABSRDm5qPaWV5HViuGb HTTP/1.1
Authorization: ApiKey ELyx8gbdteZ9s4gigTAm4PQGvHu1zrA7
<?xml version="1.0" encoding="UTF-8"?><ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#" Id="id-7c69b2b2c3f9bd9d8a83c85922048d7f">
<ds:SignedInfo>
<ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
<ds:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"/>
<ds:Reference Id="id-7c69b2b2c3f9bd9d8a83c85922048d7f-1" Type="http://www.w3.org/2000/09/xmldsig#Manifest" URI="#Manifestid-7c69b2b2c3f9bd9d8a83c85922048d7f">
<ds:Transforms>
<ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
</ds:Transforms>
<ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/>
<ds:DigestValue>lkHQNM4IfcZNvsKi4bE6XQbWOpr+CJWpQcG3d+rAP78=</ds:DigestValue>
</ds:Reference>
<ds:Reference Type="http://uri.etsi.org/01903#SignedProperties" URI="#xades-id-7c69b2b2c3f9bd9d8a83c85922048d7f">
<ds:Transforms>
<ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
</ds:Transforms>
<ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/>
<ds:DigestValue>RGK22mpeBaZOa3iV6Vee0COAv8fGjH5iyH4I97du+TU=</ds:DigestValue>
</ds:Reference>
</ds:SignedInfo>
<ds:SignatureValue Id="value-id-7c69b2b2c3f9bd9d8a83c85922048d7f">[valeur de signature encodée, tronquée]</ds:SignatureValue>
<ds:KeyInfo>...</ds:KeyInfo>
<ds:Object>
<xad:QualifyingProperties xmlns:xad="http://uri.etsi.org/01903/v1.3.2#" Target="#id-7c69b2b2c3f9bd9d8a83c85922048d7f">
...
</xad:QualifyingProperties>
</ds:Object>
<ds:Object>
<ds:Manifest Id="Manifestid-7c69b2b2c3f9bd9d8a83c85922048d7f">
<ds:Reference Id="Manifestid-7c69b2b2c3f9bd9d8a83c85922048d7f-1" URI="document.pdf">
<ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/>
<ds:DigestValue>obcUcumzUOJsClVDv/jHTNefKTRlTJULnZx4dfOrx+I=</ds:DigestValue>
</ds:Reference>
</ds:Manifest>
</ds:Object>
</ds:Signature>