2011-09-14 16 views
6

Estoy intentando llamar a un servicio web Java desde una aplicación web MVC3 .NET usando WSE 3.0.Cómo agrego un atributo EncodingType al elemento Nonce de un UsernameToken en WSE 3.0 (.NET)

Sin embargo, el servicio web requiere un atributo "EncodingType" en el elemento Nonce del UsernameToken. A continuación se presenta un sobre de muestra SOAP que funciona correctamente con este servicio web Java:

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:v1="http://schema.mydomain.org/sms/v1_0"> 
    <soap:Header> 
    <wsse:Security soap:mustUnderstand="true" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"> 
     <wsse:UsernameToken xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"> 
     <wsse:Username>myUsername</wsse:Username> 
     <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">myPassword</wsse:Password> 
     <wsse:Nonce EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">XQkp6oYc3DRv41cxkSTW8w==</wsse:Nonce> 
     <wsu:Created>2011-09-13T20:50:08.355Z</wsu:Created> 
     </wsse:UsernameToken> 
    </wsse:Security> 
    </soap:Header> 
    <soap:Body> 
     <v1:ping/> 
    </soap:Body> 
</soap:Envelope> 

siguiente es el sobre SOAP generada a partir del proxy que VS2010 producido (capturado en Fiddler):

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"> 
    <env:Header xmlns:env="http://www.w3.org/2003/05/soap-envelope"> 
    <wsse:Security env:mustUnderstand="true"> 
     <wsse:UsernameToken xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="SecurityToken-111f922b-72c1-4057-bce4-f6555552ce6a"> 
     <wsse:Username>myUsername</wsse:Username> 
     <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">myPassword</wsse:Password> 
     <wsse:Nonce>qYse3Lor9sAJ9pKPefgkKQ==</wsse:Nonce> 
     <wsu:Created>2011-09-13T20:50:38Z</wsu:Created> 
     </wsse:UsernameToken> 
    </wsse:Security> 
    </env:Header> 
    <soap:Body> 
     <v1:ping/> 
    </soap:Body> 
</soap:Envelope> 

Si este atributo falta, este servicio web devuelve, "Se proporcionó un token de seguridad no válido (Se produjo un error al procesar un token de nombre de usuario)"

¿Cómo agrego un atributo EncodingType?

Respuesta

2

He encontrado una solución aceptable ...

La bandera EncodingType es de acuerdo a la WSSE nombre de usuario y token de seguridad Spec 1.1, que es la especificación requerida por la versión del marco de Apache CXF que este servicio Web Java es utilizando. .NET no cumple con esa especificación. Afortunadamente, había una bandera en CXF para desactivar el requisito. Hicimos eso y ahora somos capaces de comunicarnos.

+0

Hola, estoy teniendo este problema exacto. Es bueno saber que hay una bandera, sería mejor si también mencionas qué bandera, ahora todavía tengo que mirar. – toongeorges

3

He encontrado que establecer "isBSPCompliant" como una propiedad jaxws en mi punto final para "falso" resuelve los problemas de EncodingType. ¿Esta fue la solución que encontraste también?

+0

Eso me funcionó: AtliB

Cuestiones relacionadas