Méthode SignatureProvider.SignXmlDsig (Office)
Méthode utilisée pour signer le modèle XMLDSIG.
Syntaxe
expression. SignXmlDsig(QueryContinue, psigsetup, psiginfo, XmlDsigStream)
Expression Expression qui renvoie un objet SignatureProvider .
Parameters
Nom | Requis/Facultatif | Type de données | Description |
---|---|---|---|
QueryContinue | Requis | IQueryContinue | Permet de demander à l'application hôte l'autorisation de poursuivre l'opération de vérification |
psigsetup | Requis | SignatureSetup | Spécifie les informations de configuration relatives à une ligne de signature. |
psiginfo | Requis | SignatureInfo | Spécifie les informations collectées lors de la séance de signature. |
XmlDsigStream | Requis | IStream | Représente un flux de données contenant du code XML, qui représente un objet XMLDSIG . |
Remarques
XMLDSIG est un format de signature basé sur des normes (https://www.w3.org/TR/xmldsig-core/), vérifiable par des tiers. Il s’agit du format par défaut des signatures dans Microsoft Office.
Exemple
L'exemple suivant, écrit en C#, montre comment implémenter la méthode SignXmlDsig dans un projet de fournisseur de signatures personnalisé.
public void SignXmlDsig(object queryContinue, SignatureSetup sigsetup, SignatureInfo siginfo, object xmldsigStream)
{
using (COMStream comstream = new COMStream(xmldsigStream))
{
XmlDocument xmldsig = new XmlDocument();
xmldsig.PreserveWhitespace = true;
xmldsig.Load(comstream);
XmlNamespaceManager nsmgr = new XmlNamespaceManager(xmldsig.NameTable);
nsmgr.AddNamespace("ds", "https://www.w3.org/2000/09/xmldsig#");
XmlElement signature = xmldsig.DocumentElement;
SignedXml signedXml = new SignedXml();
signedXml.LoadXml(signature);
// Cert
X509Certificate2 cert = TestSignatureProvider.GetSigningCertificate(siginfo);
KeyInfo keyInfo = new KeyInfo();
if (cert.PrivateKey is RSA)
keyInfo.AddClause(new RSAKeyValue((RSA) cert.PrivateKey));
else if (cert.PrivateKey is DSA)
keyInfo.AddClause(new DSAKeyValue((DSA) cert.PrivateKey));
keyInfo.AddClause(new KeyInfoX509Data(cert));
signedXml.SigningKey = cert.PrivateKey;
signedXml.KeyInfo = keyInfo;
// Compute signature
signedXml.ComputeSignature();
// Copy data from signed signature
// REVIEW: Cleaner way to do this?
string[] xpathsToCopy = new string[]
{
"./ds:SignedInfo",
"./ds:SignatureValue",
"./ds:KeyInfo",
};
XmlElement signedSignature = signedXml.GetXml();
foreach (string xpathToCopy in xpathsToCopy)
{
signature.ReplaceChild(
xmldsig.ImportNode(signedSignature.SelectSingleNode(xpathToCopy, nsmgr), true),
signature.SelectSingleNode(xpathToCopy, nsmgr));
}
// Save signature back to stream
comstream.SetLength(0);
comstream.Position = 0;
xmldsig.Save(new XmlTextWriter(comstream, new UTF8Encoding(false)));
}
}
Remarque
Les fournisseurs de signatures sont implémentés exclusivement dans les compléments COM personnalisés créés dans un code managé et non managé et ne peuvent pas l'être dans Microsoft Visual Basic pour Applications (VBA).
Voir aussi
Assistance et commentaires
Avez-vous des questions ou des commentaires sur Office VBA ou sur cette documentation ? Consultez la rubrique concernant l’assistance pour Office VBA et l’envoi de commentaires afin d’obtenir des instructions pour recevoir une assistance et envoyer vos commentaires.
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour