Cuando uso WCF y C# en un proyecto, recibo una excepción, MesssageSecurityException, con el mensaje "El encabezado de seguridad está vacío". Aquí sigue la respuesta (según MS Visor de seguimiento de servicio):C# .NET 4.0 WCF MessageSecurityException, "El encabezado de seguridad está vacío". al consumir un servicio
<soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope" xmlns:wsa="http://www.w3.org/2005/08/addressing">
<soapenv:Header>
<wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" soapenv:mustUnderstand="true"></wsse:Security>
<wsa:Action>_WHAT_I_DID_</wsa:Action>
<wsa:RelatesTo>_MSG_ID_OF_REQUEST_</wsa:RelatesTo>
</soapenv:Header>
<soapenv:Body>
_CORRECT_BODY_
</soapenv:Body>
</soapenv:Envelope>
De hecho, la cabecera de seguridad es "vacío", pero sigue siendo correcta accprding a la definición cabecera de seguridad por lo que yo puedo decir.
También he intentado editar los enlaces, pero eso no parece ayudar también. También encontré un problema similar donde habilitar EnableUnsecuredResponse
ayudaría, pero aquí no.
Aquí está la respuesta según SoapUI:
<soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope" xmlns:wsa="http://www.w3.org/2005/08/addressing">
<soapenv:Header>
<wsse:Security soapenv:mustUnderstand="true" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"/>
<wsa:Action>_WHAT_I_DID_</wsa:Action>
<wsa:RelatesTo>_REQ_MSG_ID_</wsa:RelatesTo>
</soapenv:Header>
<soapenv:Body>
_CORRECT_BODY_
</soapenv:Body>
</soapenv:Envelope>
Ellos son casi idénticas, excepto por la forma en que cierran la cabecera de seguridad. ¿Qué es interesante, pero no debería plantear la excepción?
También encontré un similar problem donde la solución era crear un codificador de mensajes personalizado y quitar todo el encabezado de seguridad, aunque esto funcionaría es un paso innecesario adicional. ¿Es esa la única forma de hacerlo con .Net y WCF? ¿WCF no puede manejar los encabezados de seguridad sin contenido?
EDITAR: Aclaración de la cuestión, ¿está escribiendo un codificador que deja caer el encabezado de seguridad de la única manera de recibir y analizar mensajes SOAP con encabezados de seguridad vacíos utilizando WCF?
Edit2: Adición parte de conf:
<binding name="NinjaBinding">
<security allowSerializedSigningTokenOnReply="true" enableUnsecuredResponse="true"
authenticationMode="UserNameOverTransport" requireDerivedKeys="false"
securityHeaderLayout="Lax" includeTimestamp="false" allowInsecureTransport="true"
keyEntropyMode="ClientEntropy"
messageProtectionOrder="SignBeforeEncryptAndEncryptSignature"
messageSecurityVersion="WSSecurity10WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11BasicSecurityProfile10"
requireSecurityContextCancellation="false">
<localServiceSettings detectReplays="false" />
<secureConversationBootstrap _IDENTICAL_TO_ABOVE_
</secureConversationBootstrap>
</security>
<textMessageEncoding />
<httpsTransport />
</binding>
Por lo que yo sé, su configuración para permitir que prácticamente todo?
¿Qué es la configuración de seguridad de su cliente? ¿Estás consumiendo WCF o servicio que no es WCF? Whey es el encabezado de seguridad incluido incluso si está vacío? ¿Qué seguridad se usa en la solicitud? –
Conf de seguridad, básicamente solo 'UserNameOverTransport' y https-transport binding, el resto no debería importar de acuerdo con ws-spec (y he revisado cada configuración de App.config AFAIK). Non-WCF por SOAP. ¿Por qué el encabezado está incluido? ¿No tengo idea? Pero mi cliente solo está consumiendo el servidor. Seguridad en req, lo mismo que conf. La pregunta es realmente esta: ¿tiene que escribir un codificador de mensajes personalizado o puede configurar WCF de alguna manera para soltar el encabezado de seguridad sin implementar un codificador? – flindeberg
¿Quiere decir que está utilizando el Modo de seguridad = Transporte o TransportWithMessageCredential? –