Bonjour,

J'ai une requête XML en input de ce genre :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<?xml version="1.0" encoding="utf-8"?>
<test xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" Version="H003" Revision="1" xmlns="http://www.test.org/H003">
  <header authenticate="true">
    <static>
      <Product>LOG</Product>
      <OrgPubKeyDigests>
        <Authentication Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" Version="X002">P6dCnpOCWpD9+aujKIn8Mlzk+xWzuQlkuTftvauiVKY=</Authentication>
        <Encryption Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" Version="E002">lDHHo2sc9iJ1c/bv/6xYGtwe4CtdmeFldrnDD1vBDFk=</Encryption>
      </OrgPubKeyDigests>
      <SecurityMedium>0000</SecurityMedium>
    </static>
    </header>
  <AuthSignature>
    <ds:SignedInfo>
      <ds:CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" />
      <ds:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256" />
      <ds:Reference URI="#xpointer(//*[@authenticate='true'])">
        <ds:Transforms>
          <ds:Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" />
        </ds:Transforms>
        <ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
<ds:DigestValue>QNUFDmkcNYGQFUTfVKctmA6SNv6qg63cxQBdoGKRmzw=</ds:DigestValue>
      </ds:Reference>
    </ds:SignedInfo>
<ds:SignatureValue>V1DWMTo34/LNJ7vwUd8C88ghGn/A/qQmCf/SBqy7Ph4xJRcgx4UB1OaXHaEafhmWVcMeOdEm16UZ2mc/hn7cFzn3PAwESVAVaaPJLr1/LX9BPb5MeNpotrWd2/SiW+kJx+Cj0Z8lZtXmEzQ047pVnM8ju3fM4yLUr0EoW+zDk3egrWD3TApgKKNsMJynF8NQKnAAEBvnTPonVjZLCJArAPtBOiZFikBe/a8U5QJvv7/AKwuGJ90m2U9WnRyu4Mf2NFFuZjcNunZzASK8N7g2oVyExOkKm+oL0PeqThtpvyO0+usE+vANb2AXghKXLn/sdvpHvDtwogqus+6Vd4r36g==</ds:SignatureValue>
  </AuthSignature>
  <body>
    <DataTransfer>
      <DataEncryptionInfo authenticate="true">
        <EncryptionPubKeyDigest Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" Version="E002">lDHHo2sc9iJ1c/bv/6xYGtwe4CtdmeFldrnDD1vBDFk=</EncryptionPubKeyDigest>
<TransactionKey>Ky0dXe4PvIJDvbMLD54mokMyuGN6UIpq4T/iobp+HmAQChoTvR0AEplk1j2yURgXG5FzmsqGK0FYKg/CuTAQsBZCIm+9taYD71SHdD+WolEVizEbdKpTFTLAnStS5numUOhasEPxeyFlsWtCywwGYC0b0i5sQwtx+TjM3WnyKfwmXbVzRX0NqZQaKVT/efiwRsN/agWVvzEi7965V4Unxdc69C0DenJmdOxL6SSUoPQz9/LYL+w1cP/yC+ffJcI0lWfTkHD8n6/Guh2OIW8WQBod3ry1flheRBK3N4p80q9h8oNwMeWW8gbJ8DxKm2cwQESoLzLUKhgeLrGjjupj5w==</TransactionKey>
      </DataEncryptionInfo>
      <SignatureData authenticate="true">qBxDgSjnGIY3cPJVYkDbWQlZ8kWhwjHcB21JWkFHcSvAyNKXgwFrDl5iNzScrZNw0AUgTKN/ChECjgmciB8PFJ+lejKuRCsujOSPnvUMQYN3oUKc57cV5eWLNW4X5R3o7oTLPbmlDy5rNvFA/K5J6qTOfysG6rxDHtt6+vnpXcKqb8x5Xt3+baOEIgigspFxA0tZP4YBRQ/m0oz71l4+biDYBvvLH0PzwrrL4l/HckcnyxzUT+cMyWhSEIIR+fzhpI4loZjGoTf/plKAo7BlDMB65aXCFX4eD6LOj6UeUF0SwOzW9WTBuTHZkupPQBW8t1HSekXNxIrTAukmkoUYxprNdid9+/eRZaThyYruCV5nuE9tF7w3vVY5CHe9Do+oguz2sDe7KUWBxhjFKMqvdmM/GtZHXSc7XPaKsYjwKBqEuoangWULJ7maq3x7ifpZa87gjBmCjPbWaQ2fhDJDPd/kWzneAAYj5uT8wxwXxA8tKoK7LSV1v+wbmGu/QGCXtkRhM5RVZR7FUqF+h9lcG5ke2u2gWL4Z0a16FKSQWKl7ykQ25HfUwK79vNtS2Zl9dei6zyUyR2lmUPOayTbe5uH+ZzHOIlikCOykDr4dhwNAsk8360ZdaJ4LrGmrvMlsblbq5ViVkQe829rfXO5YR2iHpNUle67Vzh3bm4FxNEo=</SignatureData>
    </DataTransfer>
  </body>
</test>
Et je dois la canoniser de manière à ne récupérer que la partie SignedInfo (ou d'autres parties de la requête, par exemple uniquement celles qui ont le tag "Authenticate=true". Exemple de résultat de canonisation par SignedInfo :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
<ds:SignedInfo xmlns="http://www.org/H003" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
      <ds:CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"></ds:CanonicalizationMethod>
      <ds:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"></ds:SignatureMethod>
      <ds:Reference URI="#xpointer(//*[@authenticate='true'])">
        <ds:Transforms>
          <ds:Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"></ds:Transform>
        </ds:Transforms>
        <ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"></ds:DigestMethod>
      <ds:DigestValue>QNUFDmkcNYGQFUTfVKctmA6SNv6qg63cxQBdoGKRmzw=</ds:DigestValue>
      </ds:Reference>
    </ds:SignedInfo>
J'ai vu qu'une classe permet de le faire : XmlDsigExcC14NTransformUrl mais je ne sais pas comment m'en servir. J'ai vu les exemples sur MSDN mais pour chacun de ces exemples on ne part pas d'une string XML au départ. Avez-vous une idée de comment canoniser une telle requête XML en .NET ?