2010-09-21 92 views
21

Cuando trato de llamar a un servicio WCF recibo el siguiente mensaje "Se produjo un error al verificar la seguridad del mensaje".Ocurrió un error al verificar la seguridad del mensaje

Cuando elimino la autenticación personalizada, el servicio funciona sin problemas. No puedo entender sin embargo lo que he configurado mal en mi web.config. Cualquier idea sería apreciada.

<system.serviceModel> 
    <services> 
     <service behaviorConfiguration="NAThriveExtensions.nableAPIBehavior" 
      name="NAThriveExtensions.nableAPI"> 
      <endpoint 
      address="" 
      binding="basicHttpBinding" 
      bindingConfiguration="basicHttpBinding_Secure" 
      contract="NAThriveExtensions.InableAPI"> 
      </endpoint> 
      <endpoint 
      address="mex" 
      binding="mexHttpsBinding" 
      contract="IMetadataExchange" /> 
     </service> 
    </services> 
    <behaviors> 
     <serviceBehaviors> 
      <behavior name="NAThriveExtensions.nableAPIBehavior"> 
      <serviceMetadata httpsGetEnabled="true" /> 
      <serviceDebug includeExceptionDetailInFaults="false" /> 
      <serviceCredentials> 
       <userNameAuthentication 
       userNamePasswordValidationMode="Custom" 
       customUserNamePasswordValidatorType= "NAThriveExtensions.Authentication, NAThriveExtensions" /> 
      </serviceCredentials> 
      </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    <bindings> 
     <basicHttpBinding> 
     <binding name="basicHttpBinding_Secure"> 
      <security mode="TransportWithMessageCredential"> 
      <message clientCredentialType="UserName"/> 
      </security> 
     </binding> 
     </basicHttpBinding> 
    </bindings> 
    </system.serviceModel> 

Respuesta

7

Esto terminó siendo un problema en el lado consumidor, no con el servicio en sí. WebMethods 8 de Software AG estaba consumiendo este servidor, pero no se agregó ningún controlador de seguridad al servicio, por lo que las credenciales no se agregaron al encabezado, lo que provocó el error mencionado anteriormente.

+5

¿Cómo se puede averiguar si este es realmente el problema? – Maritim

+0

@Maritim: Buena pregunta. Mirar la solicitud HTTP sin procesar es la mejor forma que conozco, p. Ej. al iniciar sesión si ya no se está registrando: el encabezado SOAP faltante (elementos del) debería ser aparente. – J0e3gan

27

Estaba recibiendo el mismo mensaje de error y resultó ser debido a una diferencia de tiempo entre mi máquina de estación de trabajo y el servidor que aloja el servicio WCF. El servidor estaba a unos 10 minutos de mi máquina y la seguridad de WCF no parece gustarle mucho.

Para encontrar el problema de raíz encendí serviceSecurityAuditing en el archivo de configuración del servidor. Añadir lo siguiente al// comportamientos/serviceBehaviors/sección de configuración system.serviceModel comportamiento para su servicio:

<serviceSecurityAudit 
    auditLogLocation="Application" 
    serviceAuthorizationAuditLevel="Failure" 
    messageAuthenticationAuditLevel="Failure" 
    suppressAuditFailure="true"/> 

El siguiente sitio fue útil para calcular esto:

http://blogs.microsoft.co.il/blogs/urig/archive/2011/01/23/wcf-quot-an-error-occurred-when-verifying-security-for-the-message-quot-and-service-security-audit.aspx

+7

¡Este es un gran consejo de diagnóstico! Gracias por compartir. – Tedford

+1

Esto realmente es un gran consejo. Parecía que me faltaba una DLL, como se describe aquí: http://stackoverflow.com/questions/14033193/entity-framework-provider-type-could-not-be-loaded#comment29085393_15358941 – ArieKanarie

+1

Desearía poder votar esto más que ¡una vez! Medio día tratando de obtener el mensaje de error real. –

0

que estaba recibiendo el mismo error en mi servidor IIS 7.5. Olvidé agregar permiso de lectura en la clave privada del certificado al app pool virtual account (por ejemplo, IIS AppPool \ ASP.NET v4.0).

Para información, mientras probaba varias combinaciones de cuentas y permisos, noté que el grupo de aplicaciones necesitaba ser reciclado para perder acceso a la clave, una vez que se había recuperado una vez.

(0x80131501 -. Se produjo un error al verificar la seguridad para el mensaje)

15

Otra causa de este mensaje es cuando algunas de sus máquinas no están sincronizados en el tiempo. WCF, por defecto, permite un espacio de cinco minutos; más allá de esto, arroja un error si las cosas no están sincronizadas.

La solución es sincronizar todas sus máquinas. time.windows.com es notorio por no funcionar, entonces sugiero usar algo más. (Si estás en un entorno corporativo, un controlador de dominio local puede ser la elección correcta aquí.)

+4

¡Muchas gracias! ¡Estaba tirando de mi cabello preguntándome qué era este problema! – CodeCanuck

+0

Me alegro de que no sea solo yo @ Stealth22 :) – ashes999

+3

Mi servidor y mi cliente estaban en el mismo reloj. El reloj del cliente se configuró automáticamente pero el reloj del servidor se configuró manualmente. Activé "Establecer hora automáticamente" en el servidor y el problema fue resuelto. – Oktay

-4

El nombre de usuario y la contraseña es el servidor que la conexión, no su sistema de nombre de usuario y la contraseña de inicio de sesión.

0

Recibo el mismo error y ninguno de los anteriores me ayuda.

Finalmente lo rastreé hasta connectionStrings en un web.config principal (mi servicio se implementó en una aplicación secundaria en un sitio de administración).

Sí, suena ridículo, pero tan pronto como envolví las cadenas de conexión en el web.config principal con un elemento de ubicación, todo comenzó a funcionar.

Para mayor claridad, en web.config padres, he cambiado este

<connectionStrings> 
    <add name="..." /> 
</connectionStrings> 

a este

<location path="." inheritInChildApplications="false"> 
    <connectionStrings> 
     <add name="..." /> 
    </connectionStrings> 
</location> 

Nota este error también dio lugar a este mensaje muy poco útil serviceSecurityAudit registro:

Error de autenticación de mensaje.
servicio: ...
Acción: http://schemas.xmlsoap.org/ws/2005/02/trust/RST/SCT
ClientIdentity:
ActivityId:
ArgumentNullException: Valor no puede ser nulo.
Nombre del parámetro: administrador

0

Recibo el mismo error. Olvidé agregar el permiso de lectura en la base de datos de membresía aspnetdb a (IIS APPPOOL \ DefaultAppPool).

Error de autenticación de mensajes. Servicio: ....

Acción: http://schemas.xmlsoap.org/ws/2005/02/trust/RST/SCT

ClientIdentity:

ActivityId:

SqlException: No se puede abrir la base de datos "aspnetdb" solicitada por el inicio. El inicio de sesión falló.

Error de inicio de sesión para el usuario 'IIS APPPOOL \ DefaultAppPool'.

Cuestiones relacionadas