L'ajout de WS-Security Identification d'en-têtes SOAP en utilisant WCF

Je suis en train de communiquer avec un web service Java que je n'ai aucun contrôle sur, et je suis en train de créer une liaison qui va marcher.

  1. Timestamp n'est pas autorisé dans l'en-tête, de sorte à pouvoir utiliser les includeTimestamp="false" attribut, je dois utiliser un <customBinding>.
  2. Ils sont à l'aide de MTOM, donc je dois utiliser le <mtomMessagingEncoding> élément.

Voici mon <bindings> élément:

<bindings>
  <customBinding >
    <binding name="MyBindingName" >
      <mtomMessageEncoding  />
      <transactionFlow />
      <security authenticationMode="UserNameOverTransport"
                includeTimestamp="false">            
      </security>
    </binding>
  </customBinding>
</bindings>

Le service web SOAP exige que le message d'en-tête être dans le format suivant:

 <soap:Envelope ... >
  <soap:Header ... >
    <wsse:UsernameToken>
      <wsse:Username>doo</wsse:Username>
      <wsse:Password Type="wsse:PasswordText">fuss</wsse:Password>
    </...>
  </...>
 </...>

Le plus proche que je suis venu est:

<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" 
            xmlns:a="http://www.w3.org/2005/08/addressing" 
            xmlns:u="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
  <s:Header>
    <a:Action s:mustUnderstand="1"></a:Action>
    <a:MessageID>urn:uuid:a368e205-a14d-4955-bf75-049cdd3a78c0</a:MessageID>
    <a:ReplyTo>
      <a:Address>http://www.w3.org/2005/08/addressing/anonymous</a:Address>
    </a:ReplyTo>
    <a:To s:mustUnderstand="1">https://blablabla</a:To>
    <o:Security s:mustUnderstand="1" 
                xmlns:o="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
    <o:UsernameToken u:Id="uuid-0f1e399b-31a8-4e00-a57f-277c21e94879-1">
      <o:Username><!-- Removed--></o:Username>
      <o:Password><!-- Removed--></o:Password>
    </o:UsernameToken>
   </o:Security>
 </s:Header>

Je suis sûr que je suis absent quelque chose d'anodin et stupide ici, mais pour la vie de moi je ne peux pas comprendre ce que cela pourrait être.

  • Ce qui se passe lorsque vous utilisez la fonction "Ajouter une Référence de Service"?
  • Je n'ai utiliser la fonction "Ajouter une Référence de Service", mais le WSDL ne contiennent pas de ws-security information.
  • Incroyable le nombre d'organisations qui ne reçoivent pas que le WSDL est de décrire le service. Est-il une explication à cela? Comme, peut-être que la sécurité est mise en œuvre par quelque chose en dehors du service?
InformationsquelleAutor Scott Baker | 2011-10-10