Произошла ошибка при проверке безопасности сообщения - PullRequest
24 голосов
/ 22 сентября 2010

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

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

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

Ответы [ 8 ]

33 голосов
/ 08 марта 2013

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

Чтобы найти корневую проблему, я включил serviceSecurityAuditing в конфигурационном файле сервера. Добавьте следующее в раздел config / system.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

17 голосов
/ 31 января 2014

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

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

7 голосов
/ 08 октября 2010

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

0 голосов
/ 17 марта 2019

У меня была похожая проблема. Я строил строки в формате datetime, используя мое местное время , но мой сервис / сервер ожидал GMT .

Мне нужно было получить время по Гринвичу (JAVA):

final Date currentTime = new Date();    
final SimpleDateFormat sdf = 
new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'.000Z'");
sdf.setTimeZone(TimeZone.getTimeZone("GMT"));
System.out.println(sdf.format(currentTime));
0 голосов
/ 19 декабря 2016

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

Ошибка аутентификации сообщения.Служба: ....

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

ClientIdentity:

ActivityId:

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

Ошибка входа для пользователя 'IIS APPPOOL \ DefaultAppPool'.

0 голосов
/ 06 сентября 2016

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

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

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

Для ясности, в родительском web.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: значение не может быть нулевым.
Имя параметра: manager

0 голосов
/ 23 декабря 2015

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

0 голосов
/ 08 апреля 2013

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

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

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

...