2010-09-21 19 views
21

Quando si tenta di chiamare un servizio WCF, viene visualizzato il seguente messaggio "Si è verificato un errore durante la verifica della sicurezza del messaggio".Si è verificato un errore durante la verifica della sicurezza per il messaggio

Quando rimuovo l'authenicazione personalizzata, il servizio non ha alcun problema. Non riesco a capire se quello che ho configurato male nel mio web.config. Qualsiasi intuizione sarebbe apprezzata.

<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> 

risposta

7

Questo ha finito per essere un problema dal lato dei consumatori, non del servizio stesso. I webmethods 8 di Software AG stavano consumando questo server, ma non c'era alcun gestore di sicurezza aggiunto al servizio, quindi le credenziali non venivano aggiunte all'intestazione risultando così nell'errore sopra menzionato.

+5

Come si può scoprire se questo è davvero il problema? – Maritim

+0

@Maritim: buona domanda. Osservare la richiesta HTTP non elaborata è il modo migliore che conosca, ad es. registrandolo se non è già stato registrato: gli header mancanti (elementi) di SOAP dovrebbero quindi essere evidenti. – J0e3gan

27

Stavo ricevendo lo stesso messaggio di errore e si è verificato a causa di una differenza di tempo tra il mio computer workstation e il server che ospita il servizio WCF. Il server era a circa 10 minuti dietro la mia macchina e la sicurezza della WCF non sembra piacermi molto.

Per trovare il problema di root ho attivato serviceSecurityAuditing nel file di configurazione del server. Aggiungere quanto segue al/system.serviceModel// serviceBehaviors/sezione di configurazione comportamenti comportamento per il vostro servizio:

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

Il seguente sito è stato utile per capire questo fuori:

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

Questo è un ottimo consiglio diagnostico! Grazie per la condivisione. – Tedford

+1

Questo è davvero un grande consiglio. Sembrava che mi mancasse una DLL, come descritto qui: http://stackoverflow.com/questions/14033193/entity-framework-provider-type-could-not-be-loaded#comment29085393_15358941 – ArieKanarie

+1

Vorrei poter sopravvivere più di una volta! Mezza giornata cercando di ottenere il vero messaggio di errore. –

0

mi è stato sempre lo stesso errore sul mio server IIS 7.5. Ho dimenticato di aggiungere l'autorizzazione di lettura sulla chiave privata del certificato allo app pool virtual account (ad esempio, IIS AppPool \ ASP.NET v4.0).

Per informazioni, durante il test di varie combinazioni di account e permessi, ho notato che il pool di app doveva essere riciclato per perdere l'accesso alla chiave, una volta che era stata recuperata una volta.

(0x80131501 -. Si è verificato un errore durante la verifica di sicurezza per il messaggio)

15

Un'altra causa di questo messaggio è quando alcune delle vostre macchine non sono sincronizzati in tempo. WCF, per impostazione predefinita, consente un intervallo di cinque minuti; oltre a questo, genera un errore se le cose non sono sincronizzate.

La soluzione è sincronizzare tutte le macchine. time.windows.com è noto per non funzionare, quindi suggerisco di usare qualcos'altro. (Se siete in un ambiente aziendale, un controller di dominio locale può essere la scelta giusta qui.)

+4

Grazie mille! Mi stavo strappando i capelli chiedendomi quale fosse questo problema !! – CodeCanuck

+0

Sono contento che non sono solo io @ Stealth22 :) – ashes999

+3

Il mio server e il mio cliente erano allo stesso orologio. L'orologio del client è stato configurato automaticamente ma l'orologio del server è stato impostato manualmente. Ho attivato "Imposta automaticamente il tempo" sul server e il problema è stato risolto. – Oktay

-4

Il nome utente e la password sono server che si collegamento, non il sistema nome utente e la password di accesso.

0

Stavo ricevendo lo stesso errore e nessuno dei suddetti aiuti per me.

Infine, l'ho rintracciato in connectionStrings in un web.config genitore (il mio servizio è stato distribuito su un'applicazione figlia a un sito di amministrazione).

Sì sembra ridicolo, ma non appena ho avvolto le stringhe di connessione nel web.config padre con un elemento di posizione tutto ha iniziato a funzionare.

Per chiarezza, in web.config genitore, ho cambiato questa

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

a questo

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

Nota questo errore ha portato anche in questo molto scostante messaggio serviceSecurityAudit registro:

Autenticazione messaggio fallita.
Servizio: ...
Azione: http://schemas.xmlsoap.org/ws/2005/02/trust/RST/SCT
ClientIdentity:
ActivityId:
ArgumentNullException: Valore non può essere null.
Nome parametro: manager

0

Stavo ottenendo lo stesso errore. Ho dimenticato di aggiungere l'autorizzazione di lettura sul database di appartenenza aspnetdb a (IIS APPPOOL \ DefaultAppPool).

Autenticazione messaggio non riuscita. Servizio: ....

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

ClientIdentity:

ActivityId:

SqlException: Impossibile aprire il database "aspnetdb" richiesto dall'account di accesso. L'accesso non è riuscito.

Accesso non riuscito per l'utente 'IIS APPPOOL \ DefaultAppPool'.

Problemi correlati