Question

J'ai exposé plusieurs services Web de notre produit à l'aide de Java et de WS-Security. Un de nos clients souhaite utiliser le service Web à l'aide de ColdFusion. ColdFusion prend-il en charge WS-Security? Puis-je contourner ce problème en écrivant un client Java et en l'utilisant dans ColdFusion?

(Je ne connais pas grand chose à propos de ColdFusion).

Était-ce utile?

La solution

Je suppose que vous voulez dire que vous devez transmettre la sécurité dans l’en-tête SOAP. Voici un exemple sur la façon de se connecter à un service .Net. La même approche devrait s’appliquer à Java, seule l’URL serait différente.

<cfset local.soapHeader = xmlNew()>
<cfset local.soapHeader.TheSoapHeader = xmlElemNew(local.soapHeader, "http://someurl.com/", "TheSoapHeader")>
<cfset local.soapHeader.TheSoapHeader.UserName.XmlText = "foo">
<cfset local.soapHeader.TheSoapHeader.UserName.XmlAttributes["xsi:type"] = "xsd:string">

<cfset local.soapHeader.TheSoapHeader = xmlElemNew(local.soapHeader, "http://webserviceUrl.com/", "TheSoapHeader")>
<cfset local.soapHeader.TheSoapHeader.Password.XmlText = "bar">
<cfset local.soapHeader.TheSoapHeader.Password.XmlAttributes["xsi:type"] = "xsd:string">

<cfset theWebService = createObject("webservice","http://webserviceUrl.com/Webservice.asmx?WSDL")>
<cfset addSOAPRequestHeader(theWebService, "ignoredNameSpace", "ignoredName", local.soapHeader, false)>

<cfset aResponse = theWebService.SomeMethod(arg1)>

J'espère que c'est ce dont vous aviez besoin.

Autres conseils

C’est probablement plus précis de produire le "simple" en-tête de savon XML. Il manque quelques lignes dans l'exemple ci-dessus.

Local['soapHeader'] = xmlNew();
Local['soapHeader']['UsernameToken'] =  xmlElemNew(local.soapHeader, "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd", "UsernameToken");
Local['soapHeader']['UsernameToken']['username'] =  xmlElemNew(local.soapHeader, "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd", "username");
Local['soapHeader']['UsernameToken']['username'].XmlText = Arguments.szUserName;
Local['soapHeader']['UsernameToken']['username'].XmlAttributes["xsi:type"] = "xsd:string";
Local['soapHeader']['UsernameToken']['password'] =  xmlElemNew(local.soapHeader, "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd", "password");
Local['soapHeader']['UsernameToken']['password'].XmlText = Arguments.szPassword;
Local['soapHeader']['UsernameToken']['password'].XmlAttributes["xsi:type"] = "xsd:string";
addSOAPRequestHeader(ws, "ignoredNameSpace", "ignoredName", Local.soapHeader, false);

Je n'ai jamais utilisé ws-security et je ne sais pas si ColdFusion peut le consommer ou non, mais pour répondre à votre question secondaire:

  
    

Puis-je contourner le problème en écrivant un client java et en l'utilisant dans coldfusion?

  

Oui, absolument. ColdFusion peut facilement utiliser des objets et des méthodes Java.

Je fais moi-même des recherches sur WS-Secuirty et ColdFusion depuis un certain temps et je peux certainement affirmer que l'exemple ci-dessus n'est pas une implémentation de WS-Security. Même si un nom d'utilisateur et un mot de passe sont envoyés dans l'en-tête, ils sont envoyés en texte brut. L'utilisation de SSL aidera, mais WS-Security exige beaucoup plus que simplement appliquer ce code. ColdFusion ne prend pas nativement en charge WS-Security, mais il peut facilement utiliser des objets et des méthodes Java. Il existe un paquet d'Apache appelé WSS4J qui fournit un moyen d'implémenter WS-Security en Java. Vous pouvez écrire un wrapper puis l’utiliser dans ColdFusion. Personnellement, j’ai pu le faire, cependant, il me faut un petit changement de configuration du côté de ColdFusion, avec lequel j’ai des problèmes.

Si quelqu'un peut m'aider pour la configuration, je l'apprécierais vraiment.

Dmitriy

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top