web-dev-qa-db-fra.com

Une erreur s'est produite lors de la vérification de la sécurité du message.

Lorsque j'essaie d'appeler un service WCF, le message suivant s'affiche: "Une erreur s'est produite lors de la vérification de la sécurité du message."

Lorsque je supprime l'authentification personnalisée, le service ne pose aucun problème. Je n'arrive pas à comprendre ce que j'ai mal configuré dans mon web.config. Toute idée serait appréciée.

  <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>
23
Matt Klepeis

Cela a fini par être un problème du côté consommateur, pas avec le service lui-même. Les logiciels webMethods 8 de Software AG consommaient ce serveur, mais aucun gestionnaire de sécurité n'a été ajouté au service; les informations d'identification n'étaient donc pas ajoutées à l'en-tête, ce qui entraînait l'erreur susmentionnée.

7
Matt Klepeis

Je recevais le même message d'erreur et cela s'est avéré dû à une différence de temps entre la machine de mon poste de travail et le serveur hébergeant le service WCF. Le serveur avait environ 10 minutes de retard sur ma machine et la sécurité de WCF ne semble pas l’aimer beaucoup.

Pour trouver le problème racine, j'ai activé serviceSecurityAuditing dans le fichier de configuration du serveur. Ajoutez les éléments suivants à la section configuration/system.serviceModel/behavior/serviceBehaviors/behavior de votre service:

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

Le site suivant a été utile pour comprendre ceci:

http://blogs.Microsoft.co.il/blogs/urig/archive/2011/01/23/wcf-quots and-service-security-audit.aspx

31
Sam

Une autre cause de ce message provient du fait que certaines de vos machines ne sont pas synchronisées dans le temps. WCF, par défaut, autorise un intervalle de cinq minutes; au-delà, une erreur est générée si les choses ne sont pas synchronisées.

La solution consiste à synchroniser toutes vos machines. time.windows.com est notoire pour ne pas travailler, donc je suggère d'utiliser quelque chose d'autre. (Si vous êtes dans un environnement d'entreprise, un contrôleur de domaine local peut être le bon choix ici.)

17
ashes999

J'avais la même erreur et aucune de ces réponses ne m'aide.

Je l'ai finalement retrouvé dans connectionStrings dans un parent web.config (mon service a été déployé dans une application enfant sur un site administrateur).

Oui, cela semble ridicule, mais dès que j’ai enveloppé les chaînes de connexion dans le fichier Web.config parent avec un élément location, tout a commencé à fonctionner.

Pour plus de clarté, dans parent web.config, j'ai changé

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

pour ça

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

Notez que cette erreur a également eu pour résultat ce message très inutile serviceSecurityAudit log:

L'authentification du message a échoué.
Un service: ...
Action: http://schemas.xmlsoap.org/ws/2005/02/trust/RST/SCT
ClientIdentity:
ActivityId: 
ArgumentNullException: la valeur ne peut pas être null.
Nom du paramètre: manager 

0
Dan

J'avais la même erreur. J'ai oublié d'ajouter l'autorisation de lecture sur la base de données d'appartenance aspnetdb à (IIS APPPOOL\DefaultAppPool).

L'authentification du message a échoué. Un service:.... 

Action: http://schemas.xmlsoap.org/ws/2005/02/trust/RST/SCT

ClientIdentity: 

ActivityId: 

SqlException: impossible d'ouvrir la base de données "aspnetdb" demandée par le login. La connexion a échoué. 

Échec de la connexion pour l'utilisateur 'IIS APPPOOL\DefaultAppPool '.

0
Yasser Mohammed

La même erreur se produisait sur mon serveur IIS 7.5. J'ai oublié d'ajouter l'autorisation de lecture sur la clé privée du certificat au compte virtuel du pool app (par exemple IIS AppPool\ASP.NET v4.0).

Pour plus d'informations, tout en testant diverses combinaisons de comptes et d'autorisations, j'ai remarqué que le pool d'applications devait être recyclé pour perdre l'accès à la clé, une fois celle-ci extraite.

(0x80131501 - Une erreur s'est produite lors de la vérification de la sécurité du message.)

0
ssg31415926