Extraire une partie d'un fichier XML
Bonjour,
J'ai une requête XML en input de ce genre :
Code:
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:
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 ?