2010-10-18 8 views
2

Folks, Je crée un service RESTful sécurisé en fournissant une signature XML XMLDSIG au bas du document XML. Lorsque j'envoie ce document au serveur, le service WCF effectue la méthode de désérialisation XML sur la charge HTTP pour me donner une classe C#. Malheureusement, pour que cette désérialisation se produise correctement, la définition de classe C# doit avoir toutes les propriétés requises pour définir la signature XML, même si j'en ai seulement besoin pour la sécurité.Suppression des éléments XMLDSIG du POST XML entrant dans le service RESTful de WCF

Alors, ce que je voudrais faire est la suivante:

  • construire un comportement de service WCF qui, avant l'appel, examine la signature XML, validation puis bandes hors tension XML avant la dé- sérialisation pour l'appel de méthode ordinaire.

Est-ce possible? Si oui, où puis-je commencer à chercher comment faire cela? J'ai l'impression d'être proche, je n'ai tout simplement pas trouvé le bon point d'injection WCF.

p.s. Tout est .NET 4.0, Visual Studio 2010, IIS 7+.

+0

Je me rends compte que cela ressemble étrangement à la sécurité de niveau de transport intégré de WCF sur le wsHttpBinding ... mais rappelez-vous, c'est REST. Je n'ai pas besoin de cryptage, je n'ai besoin que d'une signature XML signée par une clé privée (standard XMLDSIG ... implémenté par la classe SignedXml de .NET ...) tombée à la fin de ma charge utile puis déconnectée avant que WCF ne tente de sérialiser la charge utile dans une classe C#. –

Répondre

0

Compris. J'ai créé une classe XmlSignatureVerificationConfigurationSection qui me permet de déposer un élément XML appelé directement dans ma configuration de comportement WCF. Cette section config pointe ensuite vers le type de données de mon extension de comportement, SignatureVerificationBehavior. Ce comportement pointe ensuite vers un inspecteur de message personnalisé que j'ai écrit, SignatureVerificationInspector. Cet inspecteur ouvre le message, supprime le nœud de signature de la charge utile, vérifie la signature, puis renvoie le nouveau message (signature supprimée) dans le pipeline, où les définitions de service restent heureusement ignorantes de la présence de signatures.

Questions connexes