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

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

когда я пытаюсь вызвать службу 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 AppPoolASP.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 APPPOOLDefaultAppPool).

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

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

ClientIdentity:

значение activityid:

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

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


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


Здравствуйте.
У меня wcf сервис в виде службы.
Конфигурация сервера:

XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
<configuration> <connectionStrings>     <add name="dbAuthentication" providerName="System.Data.SqlClient" connectionString="Data Source = IVANOVAAIVANOV; User ID=fsync; Password=mt043384; Initial Catalog = GTP"  />   </connectionStrings> <system.web>     <membership defaultProvider="DefaultMembershipProvider" >       <providers>         <add name="DefaultMembershipProvider" type="System.Web.Providers.DefaultMembershipProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="dbAuthentication" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="/" />       </providers>     </membership>     <roleManager enabled="true" defaultProvider="DefaultRoleProvider">       <providers>         <add name="DefaultRoleProvider" type="System.Web.Providers.DefaultRoleProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />       </providers>     </roleManager>   </system.web> <system.serviceModel>     <behaviors>       <serviceBehaviors>         <behavior name="">           <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />           <serviceDebug includeExceptionDetailInFaults="true" />         <serviceCredentials>           <userNameAuthentication    membershipProviderName="DefaultMembershipProvider"/>         </serviceCredentials>         </behavior>       </serviceBehaviors>       <endpointBehaviors>         <behavior name="webHttpBehavior">           <webHttp />         </behavior>       </endpointBehaviors>     </behaviors>     <services>       <service name="AppServer.ServiceFacade">         <endpoint address="" binding="customBinding" bindingConfiguration="custBinding" contract="AppServer.IServiceFacade">           <identity>             <dns value="localhost" />           </identity>         </endpoint>         <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />         <endpoint address="" binding="webHttpBinding" behaviorConfiguration="webHttpBehavior" contract="AppServer.IClientAccessPolicy" />                 <host>           <baseAddresses>             <add baseAddress="net.tcp://localhost:4504/ServiceFacade" />             <add baseAddress="http://localhost:80" />           </baseAddresses>         </host>       </service>     </services>     <bindings>       <basicHttpBinding>         <binding name="LongTimeout" closeTimeout="01:00:00" openTimeout="01:00:00" receiveTimeout="01:00:00" sendTimeout="01:00:00" />         <binding name="MyBasicHttpBinding" maxBufferPoolSize="2147483647" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647">           <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />       </binding>       </basicHttpBinding>       <netTcpBinding>         <binding name="tcpBinding" closeTimeout="00:10:00" openTimeout="00:1:00" receiveTimeout="00:30:00" sendTimeout="00:30:00" maxBufferPoolSize="2147483647" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647">           <!--portSharingEnabled="true"-->           <readerQuotas maxDepth="100" maxArrayLength="10485760" maxBytesPerRead="2147483647" maxStringContentLength="2147483647" />           <security />         </binding>       </netTcpBinding>     <customBinding>       <binding name="custBinding" closeTimeout="00:10:00" openTimeout="00:1:00" receiveTimeout="00:30:00" sendTimeout="00:30:00">           <!--portSharingEnabled="true"-->           <!--<readerQuotas maxDepth="100" maxArrayLength="10485760" maxBytesPerRead="2147483647" maxStringContentLength="2147483647" />-->           <security authenticationMode="UserNameOverTransport"  allowInsecureTransport="true" includeTimestamp="true"/>         <tcpTransport maxBufferPoolSize="2147483647" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647"/>         </binding>         </customBinding>     </bindings>   </system.serviceModel> </configuration>

Конфигурация клиента:

XML
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 
<configuration>     <system.serviceModel>         <bindings>             <customBinding>                 <binding name="NetTcpBinding_IServiceFacade" >                     <binaryMessageEncoding  />                     <tcpTransport  maxReceivedMessageSize="2147483647" maxBufferSize="2147483647" />                                   </binding>             </customBinding>         </bindings>         <client>             <endpoint address="net.tcp://localhost:4504/ServiceFacade" binding="customBinding"                 bindingConfiguration="NetTcpBinding_IServiceFacade" contract="ServiceReference.IServiceFacade"                 name="NetTcpBinding_IServiceFacade" />         </client>     </system.serviceModel> </configuration>

На клиенте устанавливаю Username и Password. При вызове любого контракта из фасада сервера, на клиенте летит исключение «Ошибка при проверке безопасности сообщения». Подскажите в чем проблема. Спасибо.

C#
1 2 3 4 5 6 7 8 9 10 11 12 13 14 
private async void LoginWithUsernamePassword()     {       ClientProvider.CurrentClient.ClientCredentials.UserName.UserName = Username;       ClientProvider.CurrentClient.ClientCredentials.UserName.Password = Password;       //IsBusy = true;       //BusyContent = "Производится вход в систему...";       //ClientWrapper.CurrentUser = await ClientWrapper.Instance.TaskAsyncLogin(Username, Password);       //if (!ClientWrapper.CurrentUser.IsAuth)       //  AuthResult = $"Неверная пара логин или пароль:nUsername: [{Username}]nPassword: [{Password}]";       //else if (IsRemember)       //  CreateCookies();         //IsBusy = false;     }

Добавлено через 7 часов 44 минуты
В общем, вроде понял почему — в binding, на клиенте, необходимо добавить

XML
1 
<security authenticationMode="UserNameOverTransport"  allowInsecureTransport="true" includeTimestamp="true"/>

На проблема в том, что в silverlight allowInsecureTransport=»true» не видит. А без данного атрибута летит исключение.
Как настроить аутентификацию при помощи дефолтных провайдеров в связке wcf сервер и silverlight клиент остается открытым

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь

Когда я пытаюсь вызвать службу 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 ответов

Лучший ответ

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


7

Matt Klepeis
8 Окт 2010 в 20:24

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

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

<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- сервис-безопасность-audit.aspx


40

Sam
8 Мар 2013 в 03:10

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

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


19

ashes999
31 Янв 2014 в 20:30

У меня была аналогичная проблема. Я создавал строки в формате 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));


1

Pablo Chvx
17 Мар 2019 в 23:42

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

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

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


0

ssg31415926
8 Апр 2013 в 09:57

Я получал ту же ошибку, и ничего из вышеперечисленного мне не помогло.

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

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

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

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

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

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

ClientIdentity:

ActivityId:

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

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


0

Community
20 Июн 2020 в 12:12

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


-4

MapleStory
23 Дек 2015 в 12:05

Отправка отчета в ТОГС

Для того чтобы отправить заполненный отчет в ТОГС, нажмите в списке отчетных кампаний или списке отчетов кнопку 3.

Перед отправкой отчета в ТОГС производится арифметико-логический контроль его заполнения по всем проверкам, определенным для данного вида форм и подписание его ЭП предприятия.

      1. Подписание отчета ЭП предприятия

Заполненный отчет должен быть заверен ЭП предприятия. Подписание отчета происходит в процессе его отправки.

Отправить отчет можно следующими двумя способами:

1 способ. В списке отчетных кампаний или в списке отчетов для подписания отчета установите «флажок» для каждого отчета, требующего подписания, нажмите кнопку 3.

30

Рис. Окно подписания документа в списке кампаний

На экране отобразится окно выбора сертификата. Список сертификатов отображает все сертификаты, установленные в Системном хранилище сертификатов в папку «Личные».

В списке следует выбрать сертификат ЭП, аналогичный загруженному в ТОГС при регистрации организации, и нажать кнопку ОК.

Рис. Окно выбора сертификата ЭП

Если на секретный ключ установлен пароль, то программа запрашивает его, и подписывает документ. Для завершения подписания и отправки отчета нажмите кнопку «Выполнить».

Все подписанные и отправленные отчеты становятся доступны для просмотра в списке, отфильтрованном по статусу «Отправлен».

В случае возникновения ошибки, текст и код ошибки будут выведены перед списком отчетов.

2 способ. В списке отчетов выберите отчет для подписи его ЭП, затем выберите ссылку «Изменить» для выбранной записи. Откроется титульный раздел выбранного отчета. Нажмите кнопку 31. Дальнейшие действия аналогичны действиям, выполняемым при 1 способе подписания отчета.

Примечание:

Если подписание отчета ЭП предприятия происходит впервые, появиться запрос на установку компонента Croc.XmlSigner

Рис. Установка плагина

В появившемся окне необходимо нажать на ссылку «Скачать плагин». Откроется окно «Загрузка файла».

Рис. Запрос на установку плагина

Необходимо нажать кнопку «Запустить», после чего запуститься процесс установки компоненты. После того как установка было произведена, необходимо обновить окно браузер.

При последующем подписание отчета запрос на установку компонента не будет происходить.

  1. Изменение информации об организации

    1. Просмотр общей информации

Респондент может просматривать информацию об отчетной организации с помощью пункта «Профиль» — «Общая информация».

Рис. Просмотр общей информации

    1. Изменение набора сертификатов

Респондент может просматривать текущие и добавлять новые сертификаты с помощью пункта «Профиль» — «Сертификаты».

2

Рис. Сертификаты респондента

Для добавления нового сертификата необходимо:

  1. Нажать кнопку «Обзор»;
  2. Выбрать файл сертификата (файл с расширением .cer);
  3. Нажать кнопку «Загрузить». Сертификат будет добавлен в список сертификатов организации.
    1. Добавление уполномоченного лица

Респондент может изменять добавлять уполномоченных лиц для сдачи отчетности в пункте «Профиль» — «Контакты».

1

Рис. Окно Контакты on-line модуля подготовки отчетов

Уполномоченно лицо может сдавать отчетность за несколько организаций по назначенным ему формам. Уполномоченное лицо должно иметь уникальный адрес электронной почты. Невозможно создать уполномоченное лицо с адресом электронной почты, который уже используется в системе.

Для того чтобы добавить уполномоченное лицо, выполните следующие действия:

  1. Нажмите кнопку 8.

35

Рис. Ввод информации об уполномоченном лице

  1. Введите адрес электронной почты и нажмите кнопку «Найти».
  2. Если уполномоченное лицо с таким адресом не найдено – введите контактные данные.
  3. Загрузите сертификаты для подписи.
  4. Выделите формы для сдачи отчетности и нажмите кнопк «Добавить выделенные формы».
  5. Сохраните контакт для организации, нажав кнопку «Зарегистрировать контакт».

Для сохранения введенных данных об уполномоченных лицах нажмите кнопку «Сохранить изменения» в окне «Контакты».

    1. Настройки пользователя

Респондент может изменять настройки автосохранения отчетов, а также количество отображаемых на экране строк. Для этого необходимо выполнить следующие действия:

  1. Перейдите в пункт «Профиль» — «Настройки».
  2. Установите требуемые значения параметров автоматического сохранения отчета и отображения списков.
  3. Нажмите кнопку «Сохранить» для сохранения внесенных изменений.

3_cr

Рис. Окно установки настроек пользователя on-line модуля подготовки отчетов

    1. Изменение пароля

Респондент может изменять пароль для входа на сайт on-line модуля подготовки отчетов с помощью пункта «Профиль» — «Смена пароля».

Для этого необходимо выполнить следующие действия:

  1. Перейдите в пункт «Профиль» — «Смена пароля».
  2. В поле «Старый пароль» введите старый пароль.
  3. В поле «Новый пароль» укажите новый пароль для входа на сайт on-line, в поле «Подтверждение пароля» повторите ввод нового пароля.
  4. Нажмите кнопку «Изменить пароль» для сохранения внесенных изменений.

Рис. Смена пароля для входа на сайт on-line модуля подготовки отчетов

    1. Восстановление забытого пароля

Если респондент забыл пароль для входа в приложение он может восстановить забытый пароль. Для этого необходимо выполнить следующие действия:

  1. На главной странице приложения пройдите по ссылке «Вход».
  2. После перехода откроется страница авторизации в которой выберите ссылку «Восстановить пароль».

5

Рис. Восстановление пароля

  1. Для восстановления пароля респондента необходимо указать код ОКПО респондента и адрес электронной почты.
  2. Для восстановления пароля контакта необходимо указать только адрес электронной почты.
  3. После заполнения необходимых форм нажмите ссылку «Отправить».
  4. На указанный при регистрации почтовый ящик должна прийти ссылка на восстановление пароля. Данная ссылка действует 1 день.
  1. Завершение работы с on-line модулем подготовки отчетов

После завершения работы с отчетами окно on-line модуля подготовки отчетов следует закрыть стандартным образом: нажать кнопку закрытия окна в правом верхнем углу окна браузера.

  1. Аварийные ситуации

При работе с on-line модулем подготовки отчетов могут возникнуть следующие неисправности, приводящие к аварийным ситуациям:

  1. Если сертификат, установленный в Системном хранилище, не содержит ссылку на секретный ключ, то появится сообщение об ошибке:

подпись9

Сертификат, установленный в Системном хранилище, не содержит ссылку на секретный ключ

  1. Если сертификат, которым осуществляется подпись, содержит алгоритм ключа, не соответствующего ГОСТ, то появится следующее сообщение об ошибке:

«00027 — Алгоритм подписи указанного сертификата не поддерживается ГОСТ». Алгоритм ключа подписи можно проверить в поле «Алгоритм подписи» сертификата.

  1. Если срок действия сертификата, которым осуществляется подпись, закончился, то появится следующее сообщение об ошибке:

«01009 — Время действия сертификата истекло».

Период действия сертификата можно проверить в полях «Действителен с» и «Действителен по» сертификата.

  1. Если поле «Использование ключа» сертификата, расположенное на закладке «Состав» (см. нижеследующий рисунок), не содержит одно из назначений использования — «Цифровая подпись» или «Неотрекаемость», то появится одно из следующих сообщений об ошибке:

«04007 — Ключ для подписания используется не по назначению (Цифровая подпись, Неотрекаемость)
Не установлены значения в поле «Использование ключа» сертификата».

«04009 — Ключ для подписания используется не по назначению (Цифровая подпись, Неотрекаемость)
Проверьте поле «Использование ключа» в сертификате».

подпись6

Сертификат Содержание поля «Использование ключа» сертификата.

При повторяющихся аварийных ситуациях необходимо проконсультироваться с администратором ТОГС.

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

Когда я пытаюсь вызвать службу 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>

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

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

<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

ответ дан 07 мар ’13, в 23:03

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

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

Создан 31 янв.

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

ответ дан 08 окт ’10, 17:10

У меня была аналогичная проблема. Я создавал строки в формате 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)); 

ответ дан 17 мар ’19, в 20:03

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

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

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

ответ дан 08 апр.

Я получал ту же ошибку, и ничего из вышеперечисленного мне не помогло.

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

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

Для ясности в родительском файле web.config я изменил это

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

к этому

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

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

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

Создан 06 сен.

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

Ошибка аутентификации сообщения. Услуга:….

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

Идентификация клиента:

Идентификатор активности:

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

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

Создан 20 июн.

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

ответ дан 23 дек ’15, 09:12

Не тот ответ, который вы ищете? Просмотрите другие вопросы с метками

wcf
web-config
wcf-binding
servicebehavior

or задайте свой вопрос.

Отчет в статистику не принимается, выдает ошибку. Что это может быть?

Не уходит отчет в статистику из-за ошибки. Суть ошибки — отсутствует код объекта статистического наблюдения. Это что вообще может быть?

Спрашивают в «Красном уголке бухгалтера».

«Форма 1-предпринималь не проходит уже третий раз. СБИС. Ошибка: „в титуле отчёта отсутствует код объекта стат. наблюдения“ — что это? ОКПО указала 10 цифр. Что не так делаю? Коллеги, подскажите, пожалуйста».

В комментариях спросили:

«А сам ОКПО у вас 8 или 10 цифр.? В разъясняниях вроде написано, что если вы не зарегены/поставлена на учет в какой-то фигне (в этом стат. наблюдении), то тупо ставите свой ОКПО из 8 цифр».

Вообще, вроде проблема с ОКТМО была еще. У них там три нуля в конце нужно добавлять.

Автор пишет, что уже голова кругом от всего этого:

«По данным статистики у нас — 10 цифр. Что-то я уже столько времени на эту фигню трачу. Даже не знаю, какие из десяти две выкинуть?»

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

«Где-то читала, что есть у них пока проблема с 10 цифрами. Срок сдачи до апреля, отложите в сторонку. Потом отправите, когда наладят. Нет, так почтой отправите или в ближайшее отделение статистики закините. 5 лет назад точно можно было в в любое отделение субъекта кидать эти формы».

Также можно и по электронной почте отправить:

«Может им по е-майл отправите? Они часто принимают отчет по почте»

Еще через сайт Росстата советуют:

«Зарегистрируйтесь на сайте статистики и отправляйте прямо оттуда со свежими формами или из их программы (используя тот же логин и пароль). Регистрироваться можно самому на сайте, или они же с удовольствием регистрируют вас по телефону и говорят логин и пароль. Только вы потом подгружаете свою подпись в личном кабинете. А там уже легче отправлять».

Коллеги, а вы как думаете?

I have a problem connecting to my WCF service with clientCredentialType="UserName".

When I run the code below I get an error

FaultException: An error occurred when verifying security for the message.

When playing around with some of the binding values I also get Access is denied..

Fiddler says there is no authorization header and I cannot find the username or password in the request either.

Here are excerpts from my config:

 <system.webServer> <modules runAllManagedModulesForAllRequests="true"/> </system.webServer> <services> <service name="InventoryServices.MobileAPI" behaviorConfiguration="customBehaviour"> <endpoint address="" binding="basicHttpBinding" bindingConfiguration="secureHttpBinding" contract="InventoryServices.IMobileAPI"/> <endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange" /> </service> </services> <behaviors> <serviceBehaviors> <behavior name="customBehaviour"> <serviceSecurityAudit auditLogLocation="Application" serviceAuthorizationAuditLevel="Failure" messageAuthenticationAuditLevel="Failure" suppressAuditFailure="true" /> <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment --> <serviceMetadata httpsGetEnabled="true"/> <!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information --> <serviceDebug includeExceptionDetailInFaults="true"/> <serviceCredentials> <userNameAuthentication userNamePasswordValidationMode="Custom" customUserNamePasswordValidatorType="InventoryLibrary.Helpers.UserAuthentication,InventoryLibrary"/> </serviceCredentials> </behavior> </serviceBehaviors> </behaviors> <serviceHostingEnvironment multipleSiteBindingsEnabled="true" /> <bindings> <basicHttpBinding> <binding name="secureHttpBinding"> <security mode="TransportWithMessageCredential"> <transport clientCredentialType="Basic" proxyCredentialType="Basic" realm="MyRealm"/> <message clientCredentialType="UserName" algorithmSuite="Default" /> </security> </binding> </basicHttpBinding> </bindings> 

My username/password validator looks like so:

 public class UserAuthentication : UserNamePasswordValidator { public override void Validate(string userName, string password) { EntitiesContext db = new EntitiesContext(); db.Logs.Add(new DomainModels.Log() { DateLogged = DateTime.Now, Message = "hit auth", Type = DomainModels.LogType.Info }); db.SaveChanges(); try { if (userName == "test" && password == "test123") { Console.WriteLine("Authentic User"); } } catch (Exception ex) { throw new FaultException("Unknown Username or Incorrect Password"); } } } 

I have this as a simple test on my service:

[OperationContract] [XmlSerializerFormat] void Test(); [PrincipalPermission(SecurityAction.Demand, Name = "test")] public void Test() { } 

I have a self signed SSL certificate on my server and I can access my service/metadata.

Then I have added a service reference in a console application, and attempt to connect to the service with this code below:

class Program { static void Main(string[] args) { Stuff.InitiateSSLTrust(); BasicHttpBinding binding = new BasicHttpBinding(); binding.Security.Mode = BasicHttpSecurityMode.Transport; binding.Security.Transport.Realm = "MyRealm"; ServiceReference1.MobileAPIClient serviceProxy = new ServiceReference1.MobileAPIClient(binding, new EndpointAddress("https://xx.xx.xx.xx/InventoryServices.MobileApi.svc")); serviceProxy.ClientCredentials.UserName.UserName = "test"; serviceProxy.ClientCredentials.UserName.Password = "test123"; try { var a = serviceProxy.Login("a", "b"); } catch (Exception ex) { var ex2 = ex; } } } public class Stuff { public static void InitiateSSLTrust() { try { //Change SSL checks so that all checks pass ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback( delegate { return true; } ); } catch (Exception ex) { } } } 

I’ve checked the event viewer on the server and this error appears with each request:

MessageSecurityException: Security processor was unable to find a security header in the message. This might be because the message is an unsecured fault or because there is a binding mismatch between the communicating parties. This can occur if the service is configured for security and the client is not using security.

I have a problem connecting to my WCF service with clientCredentialType="UserName".

When I run the code below I get an error

FaultException: An error occurred when verifying security for the message.

When playing around with some of the binding values I also get Access is denied..

Fiddler says there is no authorization header and I cannot find the username or password in the request either.

Here are excerpts from my config:

 <system.webServer> <modules runAllManagedModulesForAllRequests="true"/> </system.webServer> <services> <service name="InventoryServices.MobileAPI" behaviorConfiguration="customBehaviour"> <endpoint address="" binding="basicHttpBinding" bindingConfiguration="secureHttpBinding" contract="InventoryServices.IMobileAPI"/> <endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange" /> </service> </services> <behaviors> <serviceBehaviors> <behavior name="customBehaviour"> <serviceSecurityAudit auditLogLocation="Application" serviceAuthorizationAuditLevel="Failure" messageAuthenticationAuditLevel="Failure" suppressAuditFailure="true" /> <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment --> <serviceMetadata httpsGetEnabled="true"/> <!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information --> <serviceDebug includeExceptionDetailInFaults="true"/> <serviceCredentials> <userNameAuthentication userNamePasswordValidationMode="Custom" customUserNamePasswordValidatorType="InventoryLibrary.Helpers.UserAuthentication,InventoryLibrary"/> </serviceCredentials> </behavior> </serviceBehaviors> </behaviors> <serviceHostingEnvironment multipleSiteBindingsEnabled="true" /> <bindings> <basicHttpBinding> <binding name="secureHttpBinding"> <security mode="TransportWithMessageCredential"> <transport clientCredentialType="Basic" proxyCredentialType="Basic" realm="MyRealm"/> <message clientCredentialType="UserName" algorithmSuite="Default" /> </security> </binding> </basicHttpBinding> </bindings> 

My username/password validator looks like so:

 public class UserAuthentication : UserNamePasswordValidator { public override void Validate(string userName, string password) { EntitiesContext db = new EntitiesContext(); db.Logs.Add(new DomainModels.Log() { DateLogged = DateTime.Now, Message = "hit auth", Type = DomainModels.LogType.Info }); db.SaveChanges(); try { if (userName == "test" && password == "test123") { Console.WriteLine("Authentic User"); } } catch (Exception ex) { throw new FaultException("Unknown Username or Incorrect Password"); } } } 

I have this as a simple test on my service:

[OperationContract] [XmlSerializerFormat] void Test(); [PrincipalPermission(SecurityAction.Demand, Name = "test")] public void Test() { } 

I have a self signed SSL certificate on my server and I can access my service/metadata.

Then I have added a service reference in a console application, and attempt to connect to the service with this code below:

class Program { static void Main(string[] args) { Stuff.InitiateSSLTrust(); BasicHttpBinding binding = new BasicHttpBinding(); binding.Security.Mode = BasicHttpSecurityMode.Transport; binding.Security.Transport.Realm = "MyRealm"; ServiceReference1.MobileAPIClient serviceProxy = new ServiceReference1.MobileAPIClient(binding, new EndpointAddress("https://xx.xx.xx.xx/InventoryServices.MobileApi.svc")); serviceProxy.ClientCredentials.UserName.UserName = "test"; serviceProxy.ClientCredentials.UserName.Password = "test123"; try { var a = serviceProxy.Login("a", "b"); } catch (Exception ex) { var ex2 = ex; } } } public class Stuff { public static void InitiateSSLTrust() { try { //Change SSL checks so that all checks pass ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback( delegate { return true; } ); } catch (Exception ex) { } } } 

I’ve checked the event viewer on the server and this error appears with each request:

MessageSecurityException: Security processor was unable to find a security header in the message. This might be because the message is an unsecured fault or because there is a binding mismatch between the communicating parties. This can occur if the service is configured for security and the client is not using security.

When I try to call a WCF service I am getting the following message «An error occurred when verifying security for the message.»

When I remove the custom authenication the service works no problem. I can’t figure out though what I have misconfigured in my web.config. Any insight would be appreciated.

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

asked Sep 21, 2010 at 23:26

Matt Klepeis's user avatar

Matt KlepeisMatt Klepeis

1,7241 gold badge14 silver badges25 bronze badges

I was getting this same error message and it turned out to be due to a time difference between my workstation machine and the server hosting the WCF service. The server was about 10 minutes behind my machine and WCF security doesn’t seem to like that very much.

To find the root problem I turned on serviceSecurityAuditing in the server’s config file. Add the following to the configuration/system.serviceModel/behaviors/serviceBehaviors/behavior section for your service:

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

The following site was helpful in figuring this out:

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

answered Mar 7, 2013 at 23:10

Sam's user avatar

3

Another cause of this message is when some of your machines are not synchronized in time. WCF, by default, allows a five-minute gap; beyond this, it throws an error if things are out of synch.

The solution is to synch all your machines. time.windows.com is notorious for not working, so I suggest using something else. (If you’re in a corporate environment, a local domain controller may be the correct choice here.)

answered Jan 31, 2014 at 16:30

ashes999's user avatar

ashes999ashes999

9,84715 gold badges72 silver badges120 bronze badges

3

This ended up being an problem on the consuming side, not with the service itself. Software AG’s webMethods 8 was consuming this server but there was no Security Handler added to the service so the credentials were not being added to the header thus resulting the in the aforementioned error.

answered Oct 8, 2010 at 16:24

Matt Klepeis's user avatar

Matt KlepeisMatt Klepeis

1,7241 gold badge14 silver badges25 bronze badges

2

I had a similar issue.
I was building my datetime formatted strings using my local time, but my service/server was expecting GMT.

I needed to get the GMT time (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)); 

answered Mar 17, 2019 at 20:42

Pablo Chvx's user avatar

Pablo ChvxPablo Chvx

1,74917 silver badges31 bronze badges

I was getting the same error on my IIS 7.5 server. I forgot to add Read permission on the certificate’s private key to the app pool virtual account (e.g. IIS AppPoolASP.NET v4.0).

For info, whilst testing various combinations of accounts and permissions, I noticed that the app pool needed to be recycled to lose access to the key, once it had been retrieved once.

(0x80131501 — An error occurred when verifying security for the message.)

answered Apr 8, 2013 at 5:57

ssg31415926's user avatar

ssg31415926ssg31415926

1,0172 gold badges13 silver badges21 bronze badges

I was getting the same error and none of the above help for me.

I finally tracked it down to connectionStrings in a parent web.config (my service was deployed to a child application to an admin site).

Yes sounds ridiculous, but as soon as I wrapped the connection strings in the parent web.config with a location element all started working.

For clarity, in parent web.config, I changed this

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

to this

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

Note this error also resulted in this very unhelpful serviceSecurityAudit log message:

Message authentication failed.
Service: …
Action: http://schemas.xmlsoap.org/ws/2005/02/trust/RST/SCT
ClientIdentity:
ActivityId:
ArgumentNullException: Value cannot be null.
Parameter name: manager

answered Sep 6, 2016 at 12:30

Dan's user avatar

I was getting the same error. I forgot to add Read permission on the membership database aspnetdb to the (IIS APPPOOLDefaultAppPool).

Message authentication failed. Service:….

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

ClientIdentity:

ActivityId:

SqlException: Cannot open database «aspnetdb» requested by the login. The login failed.

Login failed for user ‘IIS
APPPOOLDefaultAppPool’.

Community's user avatar

answered Dec 19, 2016 at 7:24

Yasser Mohammed's user avatar

The username and password is the server you connection,not your
system login username and password.

answered Dec 23, 2015 at 9:05

MapleStory's user avatar

MapleStoryMapleStory

6183 gold badges11 silver badges21 bronze badges

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

когда я пытаюсь вызвать службу 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 AppPoolASP.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 APPPOOLDefaultAppPool).

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

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

ClientIdentity:

значение activityid:

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

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


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


When I try to call a WCF service I am getting the following message «An error occurred when verifying security for the message.»

When I remove the custom authenication the service works no problem. I can’t figure out though what I have misconfigured in my web.config. Any insight would be appreciated.

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

asked Sep 21, 2010 at 23:26

Matt Klepeis's user avatar

Matt KlepeisMatt Klepeis

1,7241 gold badge14 silver badges25 bronze badges

I was getting this same error message and it turned out to be due to a time difference between my workstation machine and the server hosting the WCF service. The server was about 10 minutes behind my machine and WCF security doesn’t seem to like that very much.

To find the root problem I turned on serviceSecurityAuditing in the server’s config file. Add the following to the configuration/system.serviceModel/behaviors/serviceBehaviors/behavior section for your service:

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

The following site was helpful in figuring this out:

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

answered Mar 7, 2013 at 23:10

Sam's user avatar

3

Another cause of this message is when some of your machines are not synchronized in time. WCF, by default, allows a five-minute gap; beyond this, it throws an error if things are out of synch.

The solution is to synch all your machines. time.windows.com is notorious for not working, so I suggest using something else. (If you’re in a corporate environment, a local domain controller may be the correct choice here.)

answered Jan 31, 2014 at 16:30

ashes999's user avatar

ashes999ashes999

9,90716 gold badges72 silver badges120 bronze badges

3

This ended up being an problem on the consuming side, not with the service itself. Software AG’s webMethods 8 was consuming this server but there was no Security Handler added to the service so the credentials were not being added to the header thus resulting the in the aforementioned error.

answered Oct 8, 2010 at 16:24

Matt Klepeis's user avatar

Matt KlepeisMatt Klepeis

1,7241 gold badge14 silver badges25 bronze badges

2

I had a similar issue.
I was building my datetime formatted strings using my local time, but my service/server was expecting GMT.

I needed to get the GMT time (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));

answered Mar 17, 2019 at 20:42

Pablo Chvx's user avatar

Pablo ChvxPablo Chvx

1,80918 silver badges31 bronze badges

I was getting the same error on my IIS 7.5 server. I forgot to add Read permission on the certificate’s private key to the app pool virtual account (e.g. IIS AppPoolASP.NET v4.0).

For info, whilst testing various combinations of accounts and permissions, I noticed that the app pool needed to be recycled to lose access to the key, once it had been retrieved once.

(0x80131501 — An error occurred when verifying security for the message.)

answered Apr 8, 2013 at 5:57

ssg31415926's user avatar

ssg31415926ssg31415926

1,0372 gold badges13 silver badges21 bronze badges

I was getting the same error and none of the above help for me.

I finally tracked it down to connectionStrings in a parent web.config (my service was deployed to a child application to an admin site).

Yes sounds ridiculous, but as soon as I wrapped the connection strings in the parent web.config with a location element all started working.

For clarity, in parent web.config, I changed this

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

to this

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

Note this error also resulted in this very unhelpful serviceSecurityAudit log message:

Message authentication failed.
Service: …
Action: http://schemas.xmlsoap.org/ws/2005/02/trust/RST/SCT
ClientIdentity:
ActivityId:
ArgumentNullException: Value cannot be null.
Parameter name: manager

answered Sep 6, 2016 at 12:30

Dan's user avatar

I was getting the same error. I forgot to add Read permission on the membership database aspnetdb to the (IIS APPPOOLDefaultAppPool).

Message authentication failed. Service:….

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

ClientIdentity:

ActivityId:

SqlException: Cannot open database «aspnetdb» requested by the login. The login failed.

Login failed for user ‘IIS
APPPOOLDefaultAppPool’.

Community's user avatar

answered Dec 19, 2016 at 7:24

Yasser Mohammed's user avatar

The username and password is the server you connection,not your
system login username and password.

answered Dec 23, 2015 at 9:05

MapleStory's user avatar

MapleStoryMapleStory

6183 gold badges11 silver badges21 bronze badges

Когда я пытаюсь вызвать службу 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 ответов

Лучший ответ

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


7

Matt Klepeis
8 Окт 2010 в 20:24

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

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

<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- сервис-безопасность-audit.aspx


40

Sam
8 Мар 2013 в 03:10

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

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


19

ashes999
31 Янв 2014 в 20:30

У меня была аналогичная проблема. Я создавал строки в формате 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));


1

Pablo Chvx
17 Мар 2019 в 23:42

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

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

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


0

ssg31415926
8 Апр 2013 в 09:57

Я получал ту же ошибку, и ничего из вышеперечисленного мне не помогло.

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

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

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

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

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

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

ClientIdentity:

ActivityId:

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

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


0

Community
20 Июн 2020 в 12:12

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


-4

MapleStory
23 Дек 2015 в 12:05

Студворк — интернет-сервис помощи студентам

Здравствуйте.
У меня wcf сервис в виде службы.
Конфигурация сервера:

XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
<configuration>
<connectionStrings>
    <add name="dbAuthentication" providerName="System.Data.SqlClient" connectionString="Data Source = IVANOVAAIVANOV; User ID=fsync; Password=mt043384; Initial Catalog = GTP"  />
  </connectionStrings>
<system.web>
    <membership defaultProvider="DefaultMembershipProvider" >
      <providers>
        <add name="DefaultMembershipProvider" type="System.Web.Providers.DefaultMembershipProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="dbAuthentication" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="/" />
      </providers>
    </membership>
    <roleManager enabled="true" defaultProvider="DefaultRoleProvider">
      <providers>
        <add name="DefaultRoleProvider" type="System.Web.Providers.DefaultRoleProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
      </providers>
    </roleManager>
  </system.web>
<system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior name="">
          <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="true" />
        <serviceCredentials>
          <userNameAuthentication    membershipProviderName="DefaultMembershipProvider"/>
        </serviceCredentials>
        </behavior>
      </serviceBehaviors>
      <endpointBehaviors>
        <behavior name="webHttpBehavior">
          <webHttp />
        </behavior>
      </endpointBehaviors>
    </behaviors>
    <services>
      <service name="AppServer.ServiceFacade">
        <endpoint address="" binding="customBinding" bindingConfiguration="custBinding" contract="AppServer.IServiceFacade">
          <identity>
            <dns value="localhost" />
          </identity>
        </endpoint>
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
        <endpoint address="" binding="webHttpBinding" behaviorConfiguration="webHttpBehavior" contract="AppServer.IClientAccessPolicy" />
        
        <host>
          <baseAddresses>
            <add baseAddress="net.tcp://localhost:4504/ServiceFacade" />
            <add baseAddress="http://localhost:80" />
          </baseAddresses>
        </host>
      </service>
    </services>
    <bindings>
      <basicHttpBinding>
        <binding name="LongTimeout" closeTimeout="01:00:00" openTimeout="01:00:00" receiveTimeout="01:00:00" sendTimeout="01:00:00" />
        <binding name="MyBasicHttpBinding" maxBufferPoolSize="2147483647" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647">
          <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" /> 
      </binding>
      </basicHttpBinding>
      <netTcpBinding>
        <binding name="tcpBinding" closeTimeout="00:10:00" openTimeout="00:1:00" receiveTimeout="00:30:00" sendTimeout="00:30:00" maxBufferPoolSize="2147483647" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647">
          <!--portSharingEnabled="true"-->
          <readerQuotas maxDepth="100" maxArrayLength="10485760" maxBytesPerRead="2147483647" maxStringContentLength="2147483647" />
          <security />
        </binding>
      </netTcpBinding>
    <customBinding>
      <binding name="custBinding" closeTimeout="00:10:00" openTimeout="00:1:00" receiveTimeout="00:30:00" sendTimeout="00:30:00">
          <!--portSharingEnabled="true"-->
          <!--<readerQuotas maxDepth="100" maxArrayLength="10485760" maxBytesPerRead="2147483647" maxStringContentLength="2147483647" />-->
          <security authenticationMode="UserNameOverTransport"  allowInsecureTransport="true" includeTimestamp="true"/>
        <tcpTransport maxBufferPoolSize="2147483647" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647"/>
        </binding>
   
    </customBinding>
    </bindings>
  </system.serviceModel>
</configuration>

Конфигурация клиента:

XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<configuration>
    <system.serviceModel>
        <bindings>
            <customBinding>
                <binding name="NetTcpBinding_IServiceFacade" >
                    <binaryMessageEncoding  />
                    <tcpTransport  maxReceivedMessageSize="2147483647" maxBufferSize="2147483647" />
                  
                </binding>
            </customBinding>
        </bindings>
        <client>
            <endpoint address="net.tcp://localhost:4504/ServiceFacade" binding="customBinding"
                bindingConfiguration="NetTcpBinding_IServiceFacade" contract="ServiceReference.IServiceFacade"
                name="NetTcpBinding_IServiceFacade" />
        </client>
    </system.serviceModel>
</configuration>

На клиенте устанавливаю Username и Password. При вызове любого контракта из фасада сервера, на клиенте летит исключение «Ошибка при проверке безопасности сообщения». Подскажите в чем проблема. Спасибо.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
private async void LoginWithUsernamePassword()
    {
      ClientProvider.CurrentClient.ClientCredentials.UserName.UserName = Username;
      ClientProvider.CurrentClient.ClientCredentials.UserName.Password = Password;
      //IsBusy = true;
      //BusyContent = "Производится вход в систему...";
      //ClientWrapper.CurrentUser = await ClientWrapper.Instance.TaskAsyncLogin(Username, Password);
      //if (!ClientWrapper.CurrentUser.IsAuth)
      //  AuthResult = $"Неверная пара логин или пароль:nUsername: [{Username}]nPassword: [{Password}]";
      //else if (IsRemember)
      //  CreateCookies();
 
      //IsBusy = false;
    }

Добавлено через 7 часов 44 минуты
В общем, вроде понял почему — в binding, на клиенте, необходимо добавить

XML
1
<security authenticationMode="UserNameOverTransport"  allowInsecureTransport="true" includeTimestamp="true"/>

На проблема в том, что в silverlight allowInsecureTransport=»true» не видит. А без данного атрибута летит исключение.
Как настроить аутентификацию при помощи дефолтных провайдеров в связке wcf сервер и silverlight клиент остается открытым

  • Ошибка при проверке безопасности сообщения rusguard
  • Ошибка при проверке баланса теле2
  • Ошибка при проверке ssl сертификата россельхозбанк
  • Ошибка при проверке fdn
  • Ошибка при проверке authorizationmanager