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.
- Timestamp n'est pas autorisé dans l'en-tête, de sorte à pouvoir utiliser les
includeTimestamp="false"
attribut, je dois utiliser un<customBinding>
. - 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?
Vous devez vous connecter pour publier un commentaire.
Vous devez également configurer la version message, car par défaut il utilise WS-Addressing:
TransactionFlow
élément n'est pas du tout nécessaire.Btw. message vous a montré n'est pas valide l'utilisation de WS-jeton de Sécurité, car il doit être à l'intérieur de
Security
élément donc, si c'est vraiment ce que Java service s'attend à ce qu'il n'est pas conforme à WS-spécification de la Sécurité et vous aurez à utiliser des en-tête de message à la place.