Partager via


Utilisation de signatures numériques avec le modèle objet InfoPath 2003

Le modèle objet compatible avec InfoPath 2003 propose des fonctionnalités qui permettent l'utilisation de signatures numériques par programme.

Fonctionnalités de signature numérique

Les fonctionnalités de signature numérique disponibles dans InfoPath vous permettent de :

  • activer les signatures pour l'ensemble du formulaire ou pour des jeux de données spécifiques à signer séparément dans le formulaire ;

  • préciser, pour chaque jeu de données pouvant être signé, si une ou plusieurs signatures sont autorisées et quelles seront leurs relations. Par exemple, vous pouvez spécifier s'il s'agit de co-signatures parallèles ou si chaque nouvelle signature contre-signe toutes les signatures précédentes ;

  • définir un message à présenter aux utilisateurs du formulaire lorsqu'ils signent le formulaire ;

  • insérer et afficher une signature dans le document ;

  • afficher des informations vérifiables de non-répudiation ajoutées à chaque signature pour une plus grande sécurité. Ces informations supplémentaires, qui comprennent une vue du formulaire tel qu'il est présenté à chaque signataire, font partie de la signature et ne peuvent pas en être supprimées sans annuler la signature. Vous pouvez à tout moment revoir ces données en cliquant sur la signature dans le formulaire pour afficher la boîte de dialogue Vérifier la signature numérique ;

  • tirer parti d'un modèle objet permettant l'utilisation de signatures numériques et d'ajouter des informations personnalisées au bloc de signature des formulaires disposant d'une autorisation totale via un modèle objet de signature numérique.

Présentation du modèle objet des signatures numériques

Événements

Le modèle objet des signatures numériques fournit l'événement qui suit.

Nom Description

OnSign

Se produit une fois qu'un ensemble de données signables a été sélectionné pour une signature.

Vous pouvez utiliser cet événement pour manipuler les données stockées dans la signature numérique. Par exemple, vous pouvez ajouter les données d'un serveur d'horodatage fiable ou une contre-signature côté serveur de la transaction. Vous pouvez également utiliser cet événement pour bloquer la signature si l'utilisateur actuel n'est pas membre d'un groupe spécifique.

L'événement OnSign renvoie une référence à l'objet SignEventObject, qui fournit les propriétés suivantes.

Nom Description

ReturnStatus

Récupère ou définit une valeur Boolean (booléenne) indiquant l'état de retour de l'événement OnSign.

SignedDataBlock

Récupère le bloc de données signées qui a déclenché l'événement OnSign.

XDocument

Récupère une référence à l'objet XDocument associé à l'événement OnSign.

Collections et objets

Le modèle objet des signatures numériques fournit les collections qui suivent.

Nom Description

SignedDataBlocksCollection

Collection des objets SignedDataBlockObject du modèle de formulaire telle que définie dans le fichier de définition du formulaire (.xsf).

La collection SignedDataBlocksCollection implémente des propriétés qui permettent d'accéder aux objets SignedDataBlockObjects associés à un formulaire. La collection SignedDataBlocks est accessible via la propriété SignedDataBlocks de l'objet XDocument.

SignaturesCollection

Contient une collection d'objets SignatureObject pour chaque SignedDataBlockObject présent dans le formulaire.

La collection SignaturesCollection implémente des propriétés et une méthode qui permettent d'accéder aux objets SignatureObject associés au formulaire et de créer une signature. Cette collection est accessible via l'objet SignedDataBlockObject.

Lorsque vous utilisez la méthode Create de la collection SignaturesCollection, gardez à l'esprit que la signature n'est pas écrite tant que la méthode Sign n'est pas appelée au niveau de l'objet SignatureObject. Ces méthodes peuvent être appelées uniquement depuis le gestionnaire d'événements OnSign d'un modèle de formulaire avec autorisation totale.

Le modèle objet des signatures numériques fournit les objets qui suivent.

Nom Description

SignedDataBlockObject

Représente un ensemble de données signables dans un formulaire. L'objet SignedDataBlock fournit une méthode et un certain nombre de propriétés qui peuvent être utilisées pour interagir par programme avec un ensemble de données signables.

SignatureObject

Représente une signature numérique ajoutée à un formulaire ou à un ensemble de données signables dans un formulaire. La collection SignatureObject implémente les propriétés qui peuvent servir à récupérer les informations sur le signature numérique. La méthode Sign permet d'écrire le bloc de signature numérique XML et de calculer sa valeur de hachage cryptographique.

CertificateObject

Représente le certificat numérique X.509 utilisé pour créer la signature.

Utilisation de signatures numériques par programme

Le modèle objet compatible avec InfoPath 2003 fournit les membres permettant d'agir par programme sur les signatures numériques. Plus spécifiquement, les formulaires avec autorisation totale peuvent ajouter des informations personnalisées au bloc de signature avant sa validation, selon la séquence qui suit :

  1. L'utilisateur choisit d'ajouter une signature numérique à un formulaire.

  2. La première fenêtre de l'Assistant Signature numérique s'affiche.

  3. L'événement OnSign des données sélectionnées, représentées par l'objet SignedDataBlockObject, est déclenché et la méthode Sign de SignedDataBlockObject et la méthode Create de la collection SignaturesCollection s'exécutent.

  4. Les actions personnalisées facultatives sont exécutées.

  5. La méthode Sign de SignatureObject s'exécute.

  6. Les deuxième et troisième fenêtres de l'Assistant s'affichent pour le choix du certificat de signature et la saisie de commentaires.

  7. Les informations de non-répudiation s'affichent. (Elles peuvent être consultées ultérieurement dans la boîte de dialogue Vérifier la signature numérique.)

  8. Lorsque l'utilisateur clique sur le bouton Signer, la signature est ajoutée à la collection de signatures du formulaire.

L'exemple qui suit appelle la boîte de dialogue Signer et contre-signe la signature avec une valeur d'horodatage obtenue auprès d'un service d'horodatage approuvé.

[InfoPathEventHandler(EventType=InfoPathEventType.OnSign)]
public void OnSign(SignEvent e)
{
    Signature signature = e.SignedDataBlock.Signatures.Create();
    // Invoke the Sign dialog box to sign the data block.
    signature.Sign();
    // Countersign the signature with a trusted timestamp
    // Get the XML node storing the signature block
    IXMLDOMNode oNodeSig = signature.SignatureBlockXmlNode;
    IXMLDOMNode oNodeSigValue = oNodeSig.selectSingleNode(".//*[local-name(.)='signatureValue']");
    // Get timestamp from a trusted timestamp service (fictitious).
    MyTrustedTimeStampService s = new MyTrustedTimeStampService();
    string strVerifiedTimeStamp = s.AddTimeStamp(oNodeSigValue.text);
    
    //Add the value returned from the timestamp service to the 
    //unsigned part of the signature block
    IXMLDOMNode oNodeObj = oNodeSig.selectSingleNode(".//*[local-name(.)='Object']");
    IXMLDOMNode oNode = oNodeObj.cloneNode(false);
    oNode.text = strVerifiedTimeStamp;
    oNodeObj.parentNode.appendChild(oNode);

    e.ReturnStatus = true;
}