2011-07-01 19 views
14

servidor de configuración:Al menos un token de seguridad en el mensaje no se pudo validar

<?xml version="1.0"?> 
<configuration> 
<system.serviceModel> 
    <behaviors> 
     <serviceBehaviors> 
      <behavior name="ServiceCredentialsBehavior"> 
       <serviceCredentials> 
        <serviceCertificate findValue="cn=cool" storeName="TrustedPeople" storeLocation="CurrentUser" /> 
       </serviceCredentials> 
       <serviceMetadata httpGetEnabled="true" /> 
      </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    <services> 
     <service behaviorConfiguration="ServiceCredentialsBehavior" name="Service"> 
      <endpoint address="" binding="wsHttpBinding" bindingConfiguration="MessageAndUserName" name="SecuredByTransportEndpoint" contract="IService"/> 
     </service> 
    </services> 
    <bindings> 
     <wsHttpBinding> 
      <binding name="MessageAndUserName"> 
       <security mode="Message"> 
        <message clientCredentialType="UserName"/> 
       </security> 
      </binding> 
     </wsHttpBinding> 
    </bindings> 
    <client/> 
</system.serviceModel> 
<system.web> 
    <compilation debug="true"/> 
</system.web> 

Mi config cliente:

<?xml version="1.0" encoding="utf-8"?> 
    <configuration> 
<system.serviceModel> 
    <behaviors> 
     <endpointBehaviors> 
      <behavior name="LocalCertValidation"> 
       <clientCredentials> 
        <serviceCertificate> 
         <authentication certificateValidationMode="PeerTrust" trustedStoreLocation="CurrentUser" /> 
        </serviceCertificate> 
       </clientCredentials> 
      </behavior> 
     </endpointBehaviors> 
    </behaviors> 
    <bindings> 
     <wsHttpBinding> 
      <binding name="WSHttpBinding_IService" > 
       <security mode="Message"> 
        <message clientCredentialType="UserName" /> 
       </security> 
      </binding> 
     </wsHttpBinding> 
    </bindings> 
    <client> 
     <endpoint address="http://localhost:48097/WCFServer/Service.svc" 
        binding="wsHttpBinding" 
        bindingConfiguration="WSHttpBinding_IService" 
        contract="ServiceReference1.IService" 
        name="WSHttpBinding_IService" behaviorConfiguration="LocalCertValidation"> 
      <identity> 
       <dns value ="cool" /> 
      </identity> 
     </endpoint> 
    </client> 
</system.serviceModel> 

Servicio:

public string TestAccess() 
{ 
    return OperationContext.Current.ServiceSecurityContext.PrimaryIdentity.Name; 
} 

Cliente:

 ServiceClient client = new ServiceClient(); 
     client.ClientCredentials.UserName.UserName = "Admin"; 
     client.ClientCredentials.UserName.Password = "123"; 
     Console.WriteLine(client.TestAccess()); 
     Console.ReadLine(); 

Error:
Un fallo no segura o incorrectamente garantizado fue recibida de la otra parte. Vea la FaultException interna para el código de falla y el detalle.
Excepción interna:
Al menos un token de seguridad en el mensaje no se pudo validar.

¿Cómo puedo resolver esta excepción?

Respuesta

21

Creo que el problema es su nombre de usuario y contraseña. Con la configuración predeterminada, el nombre de usuario y la contraseña se validan como cuentas de Windows. Si desea otra validación, debe usar membership provider o custom user name password validator.

+1

Muchas gracias hombre, trabajé en este sencillo ejemplo de 1 semana, sin su ayuda yo trabajaría más. Ahora funciona. – croisharp

+0

aplausos, esa fue una respuesta súper genial ... ¡funciona como un encanto! – Sandepku

3

Desde el mensaje de error es bastante oscura, pensé que iba a ponerlo ahí como otra posible solución.

Mi entorno utiliza inicio de sesión único (o, si lo prefiere STS) para autenticar a un usuario a través de ASP.NET MVC sitio. El sitio MVC a su vez realiza una llamada de servicio a mi punto extremo de servicio pasando previamente el token de portador que solicitó al servidor STS con token de Bootstrap. El error que obtuve fue cuando hice una llamada de servicio desde el sitio de MVC.

En mi caso, esto es causado por la configuración de mi servicio como se indica a continuación. Particularmente nodo audienceUris, debe coincidir exactamente con el extremo de servicio:

<system.identityModel> 
    <identityConfiguration> 
     <audienceUris> 
      <add value="https://localhost/IdpExample.YService/YService.svc" /> 
     </audienceUris> 
     .... 
    </identityConfiguration> 
</system.identityModel> 

HTH.

Cuestiones relacionadas