2009-10-27 7 views
2

je besoin WCF assurer en-tête de savon comme ceci:jeton de sécurité dans le message transféré par SSL

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"><SOAP-ENV:Header> 
<wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" SOAP-ENV:mustUnderstand="1"> 
    <wsse:BinarySecurityToken xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary" ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3" wsu:Id="CertId-1D82AB9733B359236712457035776561"></wsse:BinarySecurityToken> 
    <ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#" Id="Signature-2"> 
    <ds:SignedInfo> 
    <ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/> 
<ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/> 
    <ds:Reference URI="#Timestamp-1"> 
     <ds:Transforms> 
     <ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/> 
     </ds:Transforms>  <ds:DigestMethodAlgorithm="http://www.w3.org/2000/09/xmldsig#sha1"/> 
     <ds:DigestValue> 
     </ds:DigestValue> 
    </ds:Reference> 
    <ds:Reference URI="#id-3"> 
     <ds:Transforms> 
     <ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/> 
     </ds:Transforms> 
     <ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/> 
     <ds:DigestValue> 
     </ds:DigestValue> 
    </ds:Reference> 
    </ds:SignedInfo> 
    <ds:SignatureValue> 
    </ds:SignatureValue> 
    <ds:KeyInfo Id="KeyId-1D82AB9733B359236712457035776562"> 
<wsse:SecurityTokenReference xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="STRId-1D82AB9733B359236712457035776563"> 
    <wsse:Reference URI="#CertId-1D82AB9733B359236712457035776561" ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3"/> 
    </wsse:SecurityTokenReference> 
    </ds:KeyInfo> 
    </ds:Signature> 
    <wsu:Timestamp xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="Timestamp-1"> 
    <wsu:Created>2009-06-22T20:46:17Z 
    </wsu:Created> 
    <wsu:Expires>2009-06-22T20:51:17Z 
    </wsu:Expires> 
    </wsu:Timestamp> 
    </wsse:Security> 
</SOAP-ENV:Header> 

où timestamp et les parties du corps/éléments seront signés numériquement par certificat référencé directement inclus dans le message (BinarySecurityToken) et la confidentialité sera assuré uniquement au niveau du transport par SSL (service hébergé IIS). Actuellement j'utilise les classes TransportSecurityBindingElement et HttpsTransportBinding, mais pourtant je ne peux pas gagner l'en-tête de savon comme je veux ... Le problème est (selon le traçage de message) que dans l'élément BinarySecurityToken il manque des attributs comme id, EncodingType, ValueType et le corps du message n'est pas signé (je mets ProtectionLevel à Signer le contrat)

Donc, si quelqu'un a des compétences avec cela, j'apprécierai beaucoup.

+0

Pourriez-vous jeter un échantillon du message pendant que vous le faites? Cela serait utile. – bethlakshmi

Répondre

1

Ceci est une photo dans l'obscurité, puisque je ne connais aucun WCF, mais je connais la signature de message SOAP.

Un must-have est un attribut "Id" ou "wsu: Id" dans votre élément de corps SOAP. La signature utilisera cet identifiant comme référence pour les données à signer. Dans l'exemple que vous avez publié, ce qui est fait sur le WSU: élément Horodatage - il a un id de

wsu:Id="Timestamp-1" 

Et puis la signature utilise comme une référence:

<ds:Reference URI="#Timestamp-1"> 

Et dans le exemple la signature référence également:

<ds:Reference URI="#id-3"> 

Ce qui, je suppose, est l'id du corps de l'exemple.

Je ne suis pas sûr de la manière dont l'API de votre toolkit joint les IDs, mais vous en aurez certainement besoin sur tout ce que vous signez.

EncodingType et ValueType sont un peu plus compliqués. J'ai peur de ne pas le savoir du haut de ma tête. Ma tentation serait d'essayer de corriger les Ids et ensuite de voir si tout se met en place. Ça pourrait.

Questions connexes