Произошла ошибка при проверке безопасности сообщения

когда я пытаюсь вызвать службу WCF я получаю следующее сообщение "произошла ошибка при проверке безопасности сообщения."

когда я удаляю пользовательскую аутентификацию, служба работает без проблем. Я не могу понять, что я неправильно сконфигурировал в своей сети.конфиг. Любое понимание будет оценено.

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

7 ответов


Я получал это же сообщение об ошибке, и оказалось, что это связано с разницей во времени между моей рабочей станцией и сервером, на котором размещена служба WCF. Сервер был около 10 минут позади моей машины, и WCF security, похоже, не очень нравится.

чтобы найти корневую проблему, я включил serviceSecurityAuditing в конфигурационном файле сервера. Добавьте в конфигурацию/систему следующее.serviceModel / поведение / serviceBehaviors / раздел поведение для вашего обслуживания:

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

следующий сайт был полезен в выяснении этого:

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


другая причина это сообщение, когда некоторые из ваших машин не синхронизированы во времени. WCF по умолчанию допускает пятиминутный разрыв; кроме того, он выдает ошибку, если что-то не синхронизировано.

раствор для синхронизации всех ваших машин. time.windows.com славится тем, что не работает, поэтому я предлагаю использовать что-то другое. (Если вы находитесь в корпоративной среде, локальный контроллер домена может быть правильный выбор.)


Это оказалось проблемой на стороне потребления, а не с самой службой. Webmethods 8 программного обеспечения AG потреблял этот сервер, но не было никакого обработчика безопасности, добавленного к службе, поэтому учетные данные не были добавлены в заголовок, что привело к вышеупомянутой ошибке.


Я получаю ту же ошибку на моем сервере IIS 7.5. Я забыл добавить разрешение на чтение на закрытый ключ сертификата в виртуальный аккаунт пула приложений (например, IIS AppPool\ASP.NET v4.0).

для информации, тестируя различные комбинации учетных записей и разрешений, я заметил, что пул приложений необходимо переработать, чтобы потерять доступ к ключу, как только он был извлечен один раз.

(0x80131501-произошла ошибка при проверке безопасности сообщение.)


Я получал ту же ошибку, и ни одна из вышеперечисленных помощь для меня.

Я, наконец, отследил его до connectionStrings в родительской сети.config (моя служба была развернута в дочернем приложении на сайте администратора).

Да, звучит смешно, но как только я завернул строки подключения в родительской сети.config с элементом location все начали работать.

для ясности, в родительской сети.config я изменил это

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

в это

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

обратите внимание, что эта ошибка также привела к этому очень бесполезному serviceSecurityAudit сообщение:

ошибка проверки подлинности сообщения.
Услуга. :..
Действие:http://schemas.xmlsoap.org/ws/2005/02/trust/RST/SCT
ClientIdentity:
Значение activityid:
ArgumentNullException: значение не может быть null.
Имя параметра: менеджер


Я получал ту же ошибку. Я забыл добавить разрешение на чтение в базу данных членства aspnetdb в (IIS APPPOOL\DefaultAppPool).

ошибка проверки подлинности сообщения. Услуга.:...

действие:http://schemas.xmlsoap.org/ws/2005/02/trust/RST/SCT

ClientIdentity:

значение activityid:

SqlException: не удается открыть базу данных "aspnetdb", запрошенную логином. Ошибка входа в систему.

ошибка входа в систему для IIS пользователя \Пула средством'.


имя пользователя и пароль сервер подключения,а не ваши имя пользователя и пароль для входа в систему.