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

Локализация ошибки. Компоненты

АРМ (распределенный вариант установки) и сервер RusGuard. Все версии ПО.

Описание причин и устранение ошибки

Если время и дата настроены некорректно, возможно возникновение ошибки при запуске ПО (см. рис. 7). Для исправления ошибки необходимо привести локальные настройки времени и даты в соответствие с сервером. Допустимое расхождение: +/- 5 минут.

Рисунок 7 - Ошибка при запуске ПО. Некорректно выставлено время и дата на локальном ПК

Рисунок 7 — Ошибка при запуске ПО. Некорректно выставлено время и дата на локальном ПК

Пример

Корректная настройка

В таблице ниже приведены примеры корректной настройки времени/даты (см. табл. 1).

Таблица 1 — Пример правильной настройки времени/даты

Сервер

АРМ

Время 16.50 (часовой пояс +4)

Время 16.50 (часовой пояс +4)

Время 16.50 (часовой пояс +4)

Время 15.50 (часовой пояс +3)

Время 16.50 (часовой пояс +4)

Время 17.50 (часовой пояс +5)

Некорректная настройка

В таблице ниже (см. табл. 2) приведены примеры некорректной настройки времени/даты:

одинаковое время при разных часовых поясах;

разное время в одном часовом поясе.

Таблица 2 — Пример неправильной настройки времени/даты

Сервер

АРМ

Время 16.50 (часовой пояс +4)

Время 16.40 (часовой пояс +4)

Время 16.50 (часовой пояс +4)

Время 16.50 (часовой пояс +3)

Время 16.50 (часовой пояс +4)

Время 16.50 (часовой пояс +5)

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

когда я пытаюсь вызвать службу 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 пользователя
Пула средством’.


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



Offline

pavel.kozak

 


#1
Оставлено
:

10 января 2020 г. 10:23:50(UTC)

pavel.kozak

Статус: Участник

Группы: Участники

Зарегистрирован: 13.12.2019(UTC)
Сообщений: 15
Российская Федерация

Добрый день.

Пока вопрос туманный, т.к. нет полного понимания происходящего.

Есть устоявшийся проект с использованием КриптоПро 4.0 + КриптоПро .NET (6893 работает стабильно), используется для подключения к Web сервису по WCF (Гост 2012).

Начали миграцию проекта на NET Core 3.x + .NET Framework 4.7.2, до этого была смесь Core 2.x + .NET Framework 4.6.1.

Предположительно(т.к. ставим средствами VS 2019, что он там ещё тянет под сомнением) после установки на машину SDK Core 3.x + SDK .NET Framework 4.8 + соответственно сам коре и фреймфорк получаем проблемы с WCF в существующем проекте, т.е. изменений в сам проект ещё не внесли, только установили Core + FrameWork посвежее.

При попытке подключения к сервису с авторизацией по ГОСТ ключу 2012, получаем ошибку:

Коллекция шифрования маркера не поддерживает алгоритм «urn:ietf:params:xml:ns:cpxmlsec:algorithms:transport-gost2012-256».

Т.е. поведение, как будто не установлен КриптоПро .NET. Переустанавливаем весь комплект КриптоПро + КриптоПро .NET. Результата нет.

Проверено на двух машинах Windows 10 И Windows Server 2012 R2.
Сответсвующие лицензии есть и на рабочие станции и на сервер.
Для проверки пришлось VS 2019 на сервер поставить, т.к. думали причина в Windows 10.

Интересный момент, попробовали поднять версию Крипто Про .NET (SDK Крипто Про .NET поднимали соответственно) до 7132

Выше указанная ошибка на этапе подключения пропала, но при вызове получили другую ошибку:
System.ServiceModel.FaultException: An error occurred when verifying security for the message.

Попробую узнать какую версию SDK Крипто Про использует поставщик Web Сервиса.

Отредактировано пользователем 10 января 2020 г. 10:25:30(UTC)
 | Причина: Не указана


Вверх

Offline

Максим Коллегин

 


#2
Оставлено
:

10 января 2020 г. 10:54:47(UTC)

Максим Коллегин

Статус: Сотрудник

Группы: Администраторы

Зарегистрирован: 12.12.2007(UTC)
Сообщений: 6,253
Мужчина
Откуда: КРИПТО-ПРО

Сказал «Спасибо»: 21 раз
Поблагодарили: 658 раз в 582 постах

Обновлять КриптоПро .Net при обновлении .Net нужно с вероятностью 90%
Для .Net Core мы делаем fork (обсуждается в соседней ветке), но до WCF там ещё далеко.

Знания в базе знаний, поддержка в техподдержке


Вверх

WWW


Offline

pavel.kozak

 


#3
Оставлено
:

10 января 2020 г. 11:02:18(UTC)

pavel.kozak

Статус: Участник

Группы: Участники

Зарегистрирован: 13.12.2019(UTC)
Сообщений: 15
Российская Федерация

Спасибо.

Да, форк видели но не решились, поэтому и смесь Core 98% + Framework 2%.

Сосредоточимся тогда на вопросе почему не работает с .NET КриптоПро 7132.

Попробуем ещё раз пересобрать с новым SDK 7132, может что-то упустил.

Насколько важно, что бы .NET КриптоПро был одинаковый на клиенте и на сервере?
Мне кажется должно быть все равно. На сервер повлиять мы не сможем.


Вверх

Offline

Максим Коллегин

 


#4
Оставлено
:

10 января 2020 г. 11:11:32(UTC)

Максим Коллегин

Статус: Сотрудник

Группы: Администраторы

Зарегистрирован: 12.12.2007(UTC)
Сообщений: 6,253
Мужчина
Откуда: КРИПТО-ПРО

Сказал «Спасибо»: 21 раз
Поблагодарили: 658 раз в 582 постах

Автор: pavel.kozak Перейти к цитате

Насколько важно, что бы .NET КриптоПро был одинаковый на клиенте и на сервере?
Мне кажется должно быть все равно. На сервер повлиять мы не сможем.

Не должны быть одинаковыми.

Постарайтесь собрать трассировку WCF — посмотрим.

Знания в базе знаний, поддержка в техподдержке


Вверх

WWW


Offline

pavel.kozak

 


#5
Оставлено
:

10 января 2020 г. 13:10:45(UTC)

pavel.kozak

Статус: Участник

Группы: Участники

Зарегистрирован: 13.12.2019(UTC)
Сообщений: 15
Российская Федерация

Пересобрал с последним SDK.

Если по трейсу, то получается следующий порядок:

Пытаемся вызвать удаленную функцию TestAuthentication

Поставщик токена безопасности открыт.
На клиенте запущен сеанс безопасности.
Подлинность EndpointReference была определена.
Успешно выполнена аутентификациа.
Протокол безопасности обеспечил защиту исходящего сообщения.
Через канал отправлено сообщение
Через канал получено сообщение
Через канал запроса получен ответ.

Генерирование исключения
«Процессору безопасности не удалось найти заголовок безопасности в сообщении. Это может быть вызвано тем, что сообщение не защищено или имеет место несоответствия привязки между взаимодействующими сторонами. Это может произойти, если служба настроена с режимом безопасности, а клиент не применяет режим безопасности.»

Незащищенное или неправильно защищенное сообщение об ошибке было получено от другой стороны.

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

Конец.

Тот же код с предыдущей версией работает корректно. Пока не возможности проверить на чистой машине свежий SDK КриптоПро на старом фреймвекке.


Вверх

Offline

pavel.kozak

 


#6
Оставлено
:

10 января 2020 г. 13:19:38(UTC)

pavel.kozak

Статус: Участник

Группы: Участники

Зарегистрирован: 13.12.2019(UTC)
Сообщений: 15
Российская Федерация

Автор: Максим Коллегин Перейти к цитате

Не должны быть одинаковыми.
Постарайтесь собрать трассировку WCF — посмотрим.

Оказывается, все таки есть зависимости.

https://br.so-ups.ru/Pub…ws=%5Bobject%20Object%5D

Как-то упустил эту новость.

Теперь тупичок, придется ещё одну кашу делать и запускать прослойку на машине со старым фремвёрком и старым .NET КриптоПро :(.


Вверх

Offline

Максим Коллегин

 


#7
Оставлено
:

10 января 2020 г. 20:27:26(UTC)

Максим Коллегин

Статус: Сотрудник

Группы: Администраторы

Зарегистрирован: 12.12.2007(UTC)
Сообщений: 6,253
Мужчина
Откуда: КРИПТО-ПРО

Сказал «Спасибо»: 21 раз
Поблагодарили: 658 раз в 582 постах

Странно, ничего не слышал про это. Изучим вопрос.

Знания в базе знаний, поддержка в техподдержке


Вверх

WWW


Offline

Артём Макаров

 


#8
Оставлено
:

13 января 2020 г. 8:31:35(UTC)

Артём Макаров

Статус: Сотрудник

Группы: Участники

Зарегистрирован: 20.02.2017(UTC)
Сообщений: 184

Сказал(а) «Спасибо»: 4 раз
Поблагодарили: 48 раз в 48 постах

Добрый день.

Подскажите, какой сейчас target framework задан в проекте?

Какая привязка используется?

Если возможно приложите файл конфигурации клиента (app.config).

Можете приложить wcf trace и messssage log с ошибкой?

Как собирать можно посмотреть тут — https://docs.microsoft.c…figuring-message-logging
Пример —

Код:

<system.diagnostics>
	<sources>
	  <source name="System.ServiceModel.MessageLogging" switchValue="All">
		<listeners>
		  <add type="System.Diagnostics.DefaultTraceListener" name="Default">
			<filter type="" />
		  </add>
		  <add name="ServiceModelMessageLoggingListener">
			<filter type="" />
		  </add>
		</listeners>
	  </source>
	  <source name="System.ServiceModel" switchValue="All" propagateActivity="true">
		<listeners>
		  <add type="System.Diagnostics.DefaultTraceListener" name="Default">
			<filter type="" />
		  </add>
		  <add name="ServiceModelTraceListener">
			<filter type="" />
		  </add>
		</listeners>
	  </source>
	</sources>
	<sharedListeners>
	  <add initializeData="C:logsmy_service_web_messages.svclog" type="System.Diagnostics.XmlWriterTraceListener, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" name="ServiceModelMessageLoggingListener" traceOutputOptions="Timestamp">
		<filter type="" />
	  </add>
	  <add initializeData="C:logsmy_serice_web_tracelog.svclog" type="System.Diagnostics.XmlWriterTraceListener, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" name="ServiceModelTraceListener" traceOutputOptions="Timestamp">
		<filter type="" />
	  </add>
	</sharedListeners>
	<trace autoflush="true" />
  </system.diagnostics>

Техническую поддержку оказываем тут
Наша база знаний


Вверх

Offline

pavel.kozak

 


#9
Оставлено
:

13 января 2020 г. 10:01:40(UTC)

pavel.kozak

Статус: Участник

Группы: Участники

Зарегистрирован: 13.12.2019(UTC)
Сообщений: 15
Российская Федерация

Автор: Максим Коллегин Перейти к цитате

Странно, ничего не слышал про это. Изучим вопрос.

Насколько успел узнать, тикет поставщиком сервиса создавался, примерно в то время когда они писали эту новость.


Вверх

Offline

pavel.kozak

 


#10
Оставлено
:

13 января 2020 г. 10:11:57(UTC)

pavel.kozak

Статус: Участник

Группы: Участники

Зарегистрирован: 13.12.2019(UTC)
Сообщений: 15
Российская Федерация

Автор: Артём Макаров Перейти к цитате

Подскажите, какой сейчас target framework задан в проекте?

Проверяли несколько, поведение и ошибка одинаковые и на 4.6.2, 4.7.1, 4.8.
Версия .NET Крипто про — 7132. Основной Крипто Про ставился последний 4.0, 9963.

Автор: Артём Макаров Перейти к цитате

Какая привязка используется?

WSHttpBinding

Это пример со стенда, в основном проекте вместо конфига настройка из кода идет. Но значения те же.

<wsHttpBinding>
<binding name=»wsHttpCertificateBinding» closeTimeout=»01:00:00″ openTimeout=»01:00:00″ receiveTimeout=»01:00:00″ sendTimeout=»01:00:00″
maxBufferPoolSize=»52428800″ maxReceivedMessageSize=»52428800″>
<readerQuotas maxStringContentLength=»2147483647″/>
<security>
<message clientCredentialType=»Certificate» negotiateServiceCredential=»false»/>
</security>
</binding>
</wsHttpBinding>

<endpoint address=»http://br.so-ups.ru:8091/PersonalApi/PersonalApiService.svc/ByCertificate»
binding=»wsHttpBinding» bindingConfiguration=»wsHttpCertificateBinding»
contract=»PersonalApiService.IPersonalApiService» name=»wsHttpCertificateEndpoint»>
<identity>
<certificateReference findValue=»5cee4b2593de373e184377a718bb5af83dea466b» x509FindType=»FindByThumbprint»
storeLocation=»LocalMachine» storeName=»My» />
</identity>
</endpoint>

Автор: Артём Макаров Перейти к цитате

Можете приложить wcf trace и messssage log с ошибкой?

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


Вверх
Пользователи, просматривающие эту тему

Guest

Быстрый переход
 

Вы не можете создавать новые темы в этом форуме.

Вы не можете отвечать в этом форуме.

Вы не можете удалять Ваши сообщения в этом форуме.

Вы не можете редактировать Ваши сообщения в этом форуме.

Вы не можете создавать опросы в этом форуме.

Вы не можете голосовать в этом форуме.

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 с помощью clientCredentialType="UserName".

Когда я запускаю код ниже, я получаю сообщение об ошибке

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

При игре с некоторыми значениями привязки я также получаю Access is denied..

Fiddler говорит, что нет заголовка авторизации, и я не могу найти имя пользователя или пароль в запросе.

Вот выдержки из моего конфига:

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

Мой валидатор имени пользователя/пароля выглядит так:

  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");
            }
        }
    }

У меня это как простой тест на моем сервисе:

[OperationContract]
[XmlSerializerFormat]
void Test();

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

}

У меня есть собственный сертификат SSL на моем сервере, и я могу получить доступ к своим сервисам/метаданным.

Затем я добавил ссылку на службу в консольном приложении и попытаюсь подключиться к службе с помощью этого кода ниже:

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) {
        }
    }
}

Я проверил средство просмотра событий на сервере, и эта ошибка появляется с каждым запросом:

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

Ответ 1

Вы указываете стороне клиента использовать BasicHttpSecurityMode.Transport, тогда как служба ожидает BasicHttpSecurityMode.TransportWithMessageCredential. Это проблема, потому что служба ищет учетные данные клиента в заголовке сообщения SOAP, и клиент не отправит их с привязкой, сконфигурированной таким образом.

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

Также установите ClientCredentialType на клиенте BasicHttpMessageCredentialType.UserName для Message уровня безопасности. По умолчанию BasicHttpBinding использует None, которые являются анонимными клиентами.

Здесь фрагмент кода, описывающий вышеизложенные изменения:

var basicHttpBinding = new BasicHttpBinding(
                              BasicHttpSecurityMode.TransportWithMessageCredential);
basicHttpBinding.Security.Message.ClientCredentialType = 
                                     BasicHttpMessageCredentialType.UserName;

Ответ 2

Это также может быть вызвано отсутствием синхронизации между клиентом и сервером. Если сертификат или подписанный токен являются недействительными по времени, то может быть возвращено то же сообщение An error occurred when verifying security for the message..

  • Remove From My Forums
  • Вопрос

  • Добрый день, господа. Подскажите, куда копать.

    Windows Server 2008 R2 32 bit.

    В IIS развернут узел,  — сайт web-forms,с аутентификацией по сертификату. 

    Есть ссылка на wcf, от которой получает данные. 

     При запускe на iisexpress через VS2013 в режиме отладки — все хорошо. После публикации и размещения на вышеуказанном сервере — вот такая ошибка:

    Ошибка сервера в приложении ‘/’.


    Описание: Необработанное исключение при выполнении текущего веб-запроса. Изучите трассировку стека для получения дополнительных сведений о данной ошибке и о вызвавшем ее фрагменте кода.

    Сведения об исключении: System.ServiceModel.FaultException: An error occurred when verifying security for the message.

    Ошибка источника:

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

    Трассировка стека:

    [FaultException: An error occurred when verifying security for the message.]
    
    [MessageSecurityException: Незащищенное или неправильно защищенное сообщение об ошибке было получено от другой стороны. Код ошибки и описание см. внутреннее исключение.]
       System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg) +10818447
       System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type) +336
       Service_portal.ServiceReference.IHotLine.GetData(String ProcName, CustomParams[] _params, String DBname) +0
       Service_portal.ContactClass.AddParams(String name, String value, String proc, String dbnum) +276
       Service_portal.ControlDistionary.Page_Load(Object sender, EventArgs e) +59
       System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +51
       System.Web.UI.Control.OnLoad(EventArgs e) +92
       System.Web.UI.Control.LoadRecursive() +54
       System.Web.UI.Control.LoadRecursive() +145
       System.Web.UI.Control.LoadRecursive() +145
       System.Web.UI.Control.LoadRecursive() +145
       System.Web.UI.Control.LoadRecursive() +145
       System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +772
    

    • Перемещено

      26 марта 2015 г. 11:36

Ответы

  • Здравствуйте,

    Похоже на ошибку с WCF, как одна из возможных причин, если время клиента и сервера отличается более чем на 10 минут, то не удастся пройти
    проверку безопасности .


    Best Regards, Andrei …
    Microsoft Certified Professional

    • Предложено в качестве ответа
      Tomas Lilov
      26 марта 2015 г. 12:30
    • Помечено в качестве ответа
      Иван ПродановMicrosoft contingent staff, Moderator
      31 марта 2015 г. 7:50
  • Remove From My Forums
  • Question

  • Hello,

    We have a wcf service hosted in IIS. We used basicHttpBinding and implemented a UserNamePasswordValidator for the custom authentication.

    However, we have issues when the WCF is consumed with a asmx client.

    An error occurred when verifying security for the message.

    (because asmx client can only work basicHttpBinding with transport security. basic authentication is disabled.)

    Here is my security config

                        <security mode="TransportWithMessageCredential">
                            <transport clientCredentialType="None" proxyCredentialType="None"
                                realm="" />
                            <message clientCredentialType="UserName" algorithmSuite="Default" />
                        </security>

    what are the solutions? We thought of using a simple Message Header for the authentication, however we don’t want to pass the credentials in the parameters of the method call

    var s = new service.TaskService();
    s.GetSomething(credential, TaskNumber); //not nice...
    • Edited by

      Tuesday, June 4, 2013 7:58 AM

Answers

  • Maybe the following links can help you to sort out what the problem is: http://stackoverflow.com/questions/3765212/an-error-occurred-when-verifying-security-for-the-message

    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

    Like I wrote before, you should be able to use a UserNamePasswordValidator with basicHttpBinding by using the Message security mode with a certificate or the TransportWithMessageCredential security mode with SSL.

    • Edited by
      Magnus (MM8)MVP
      Tuesday, June 4, 2013 2:22 PM
    • Marked as answer by
      Haixia_Xie
      Tuesday, June 11, 2013 7:43 AM
    • Marked as answer by
      Haixia_Xie
      Tuesday, June 11, 2013 7:43 AM
  • Remove From My Forums
  • Question

  • Hello,

    We have a wcf service hosted in IIS. We used basicHttpBinding and implemented a UserNamePasswordValidator for the custom authentication.

    However, we have issues when the WCF is consumed with a asmx client.

    An error occurred when verifying security for the message.

    (because asmx client can only work basicHttpBinding with transport security. basic authentication is disabled.)

    Here is my security config

                        <security mode="TransportWithMessageCredential">
                            <transport clientCredentialType="None" proxyCredentialType="None"
                                realm="" />
                            <message clientCredentialType="UserName" algorithmSuite="Default" />
                        </security>

    what are the solutions? We thought of using a simple Message Header for the authentication, however we don’t want to pass the credentials in the parameters of the method call

    var s = new service.TaskService();
    s.GetSomething(credential, TaskNumber); //not nice...
    • Edited by

      Tuesday, June 4, 2013 7:58 AM

Answers

  • Maybe the following links can help you to sort out what the problem is: http://stackoverflow.com/questions/3765212/an-error-occurred-when-verifying-security-for-the-message

    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

    Like I wrote before, you should be able to use a UserNamePasswordValidator with basicHttpBinding by using the Message security mode with a certificate or the TransportWithMessageCredential security mode with SSL.

    • Edited by
      Magnus (MM8)MVP
      Tuesday, June 4, 2013 2:22 PM
    • Marked as answer by
      Haixia_Xie
      Tuesday, June 11, 2013 7:43 AM
    • Marked as answer by
      Haixia_Xie
      Tuesday, June 11, 2013 7:43 AM

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

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

Для мониторинга работоспособности ПО RusGuard Soft используется утилита RusGuard агент. Утилита устанавливается автоматически вместе с сервером RusGuard. RusGuard агент обеспечивает:

контроль работоспособности серверных процессов (служб), соединений с сервером БД и сервером отчетов;

оперативное оповещение пользователя о смене состояния контролируемых процессов;

возможность изменения настроек соединения с сервером БД и сервером отчетов;

проверку работоспособности соединения с сервером БД и сервером отчетов;

возможность изменения настроек соединения с сервером БД и сервером отчетов;

возможность настройки ручной или автоматической (по заданному расписанию) чистки БД (удаление событий до определенной даты).

отображение информации о лицензиях и состоянии соответствующего ПО.

регистрацию сервера в сервисе RusGuard Cloud.

После установки серверной части программного комплекса RusGuard Soft, утилита запускается из меню Пуск ОС Windows и в дальнейшем всегда доступна в области уведомлений (системном трее) (см. рис. 1).

RusGuard агент не будет отображаться в системном трее в случае смены текущего пользователя Windows на ПК.

Запустить RusGuard агент можно вручную: Пуск > Все программы > папка RusGuard > RusGuard агент. Для автоматического запуска поместите ярлык RusGuard агент в меню Автозагрузка.

      Рисунок 1 -                  Утилита RusGuard агент  в системном трее

      Рисунок 1 —                
Утилита RusGuard агент
в системном трее

Пиктограмма в системном трее может менять цвет в зависимости от текущего состояния (настроек) системы (подсистем) (см. табл. 1).

Таблица 1 — Цветовые обозначения утилиты RusGuard агент. Общий случай (системный трей)

Цвет пиктограммы

Значение

Система (подсистемы) работает нормально

Система (одна или несколько подсистем) отключены пользователем (не запущены), но работоспособны (т.е. настройки корректны и связанные с ними компоненты функционируют нормально)

Состояние системы (одной или нескольких подсистем) неизвестно, или подсистема не установлена

Ошибка в работе системы (одной или нескольких подсистем)

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

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

Также в каждой вкладке предусмотрен набор инструментов для базовой отладки компонентов.

Вкладка Сервисы

На этой вкладке (см. рис. 2) отображается состояние серверных процессов и служб (см. табл. 2 и 3).

Рисунок 2 - Утилита RusGuard агент. Вкладка Сервисы

Рисунок 2 — Утилита RusGuard агент. Вкладка Сервисы

Таблица 2 — Цветовые обозначения утилиты RusGuard агент. Вкладка Сервисы

Цвет пиктограммы

Значение

Все сервисы работают нормально

Один или несколько сервисов не запущены

Сервис не установлен либо недоступен

Ошибка при запуске одного или нескольких сервисов

Таблица 3 — Управление работой сервисов

Кнопка

Значение

Запуск всех сервисов

Остановка всех сервисов

Перезапуск IIS. Может потребоваться после редактирования параметров доступ к серверу БД и серверу отчетов (см. ниже), а также при различных сбоях работы АРМ

Остановка того сервиса, напротив названия которого расположена кнопка

Запуск того сервиса, напротив названия которого расположена кнопка

Вкладка База данных

На этой вкладке отображается состояние БД.

Рисунок 3 - Утилита RusGuard агент. Вкладка База данных

Рисунок 3 — Утилита RusGuard агент. Вкладка База данных

На вкладке База данных отображается текущее состояние соединения с сервером БД (см. рис. 3), для уведомления пользователя об изменениях состояния используется стандартная цветовая схема утилиты (см. табл. 4).

Таблица 4 — Цветовые обозначения утилиты RusGuard агент. Вкладка База данных

Цвет пиктограммы

Значение

Соединение установлено

Не прочитан файл конфигурации, но соединение работает

Идет проверка соединения

Ошибка соединения с БД

Используя панель инструментов на вкладке (см. табл. 5), пользователь может:

Отредактировать параметры соединения с сервером БД

Проверить соединение с БД

Загрузить базу данных

Таблица 5 — Базовые настройки соединения с БД. Мониторинг БД

Кнопка

Значение

Позволяет активировать поля ввода настроек соединения с сервером БД в нижней части вкладки (область Настройки соединения с базой данных) для их редактирования

Кнопка становится активна после изменения настроек. Позволяет сохранить новые параметры соединения с БД

Кнопка становится активна после изменения настроек соединения. Позволяет отменить новые параметры соединения с БД и вернуть прежние

Проверка соединения с БД

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

Для того чтобы изменить настройки соединения с БД:

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

2.Введите новые параметры в  поля области Настройки соединения с базой данных (см. табл. 6).

Таблица 6 — Поля формы для настройки соединения с БД

Поле

Значение и требования к заполнению

Адрес и название инстанса сервера БД

Адрес сервера БД, формируемый по следующему правилу (см. табл. 7):

[Имя компьютера][Название экземпляра] 

Если сервер RusGuard и сервер БД развертываются на одном компьютере, адрес примет вид:

.[Название экземпляра]

Значение параметра «Название экземпляра» зависит от типа экземпляра SQL Server («Экземпляр по умолчанию», «Именованный экземпляр», выбранного при его установке.

Логин SQL сервер

sa  (от «super administrator»)

Пароль SQL сервер

Пароль, заданный при установке сервера RusGuard (если устанавливался одновременно с SQL-сервером), либо при установке SQL-сервера (если конфигурация подразумевает его самостоятельную установку).

3.Выполните проверку соединения .

4.Если настройки корректны, нажмите на кнопку . В противном случае отмените изменения и введите корректные данные.

5.Перезапустите все сервисы. Для этого:

i.Перейдите на вкладку Сервисы.

ii.Нажмите на кнопку и дождитесь остановки всех сервисов.

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

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

Таблица 7 — Вид адреса инстанса сервера БД. В зависимости от типа конфигурации

Тип конфигурации

Вид адресной строки

Сервер RusGuard сервер БД установлены на одном компьютере

Если установка SQL-сервера выполнялась одновременно с установкой сервера RusGuard, экземпляр SQL-сервера получит имя RUSGUARD, и адрес будет выглядеть следующим образом:

 .RUSGUARD 

Если SQL-сервер был установлен ранее в режиме наименования «Экземпляр по умолчанию«, то адрес сервера БД будет состоять только из точки (.)

Если SQL-сервер был установлен раньше в режиме наименования «Именованный экземпляр» с именем SQLExpress (возможно и другое), то адрес сервера БД примет вид:

.SQLExpress 

Сервер RusGuard сервер БД установлены на разных компьютерах

Если при установке SQL-сервера выбран режим наименования «Именованный экземпляр» с именем SQLExpress (возможно и другое, например, MyServer), то адрес примет вид:

[hostname]SQLExpress

Один из распространенных сбоев базы данных связан с остановкой SQL-сервера. Для устранения сбоя необходимо перезапустить SQL-сервер, используя SQL Server Configuration Manager (см. рис. 4).

Рисунок 4 - Перезапуск экземпляра SQL-сервера

Рисунок 4 — Перезапуск экземпляра SQL-сервера

Вкладка Сервер отчетов

На этой вкладке (см. рис. 5) выполняется настройка соединения с сервером отчетов.

Рисунок 5 - Утилита RusGuard агент. Вкладка Сервер отчетов

Рисунок 5 — Утилита RusGuard агент. Вкладка Сервер отчетов

На вкладке отображается текущее состояние соединения с сервером отчетов, для уведомления пользователя об изменениях состояния используется стандартная цветовая схема утилиты (см. табл. 8).

Таблица 8 — Цветовые обозначения утилиты RusGuard агент. Вкладка База данных

Цвет пиктограммы

Значение

Соединение установлено

Не прочитан файл конфигурации, но соединение работает

Идет проверка соединения

Ошибка соединения с сервером отчетов

Используя панель инструментов на вкладке (см. табл. 9), пользователь может:

редактировать параметры соединения с сервером отчетов;

проверять состояние соединения;

загружать отчеты на сервер.

Таблица 9  Базовые настройки соединения с сервером отчетов

Кнопка

Значение

Позволяет активировать поля ввода настроек соединения с сервером БД в нижней части вкладки (область Настройки соединения с сервером отчетов) для их редактирования

Кнопка становится активна после изменения настроек. Позволяет сохранить новые параметры соединения с сервером отчетов

Кнопка становится активна после изменения настроек соединения. Позволяет отменить новые параметры соединения с сервером отчетов и вернуть прежние

Проверка соединения с сервером отчетов

Создание чистой базы данных на сервере отчетов

Создание источника данных на сервере

Для того чтобы изменить настройки соединения с сервером отчетов:

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

2.Введите новые параметры в  поля области Настройки соединения с сервером отчетов. Используйте учетные данные, введенные при установке сервера RusGuard (или SQL-сервера, если он был установлен отдельно) (см. табл. 10).

Таблица 10  — Формат ввода адреса сервера отчетов

Поле

Формат заполнения

Cервер отчетов

http://Имя сервера отчетов/ReportServer_Имя инстанса_SQL-сервера

Примеры:

http://ServerSQL /ReportServer_SqlExpress – подключение серверу отчетов (ServerSQL) с именем инстанса SqlExpress

http://ServerSQL/ReportServer – подключение к серверу отчетов (ServerSQL) с пустым именем инстанса

Предупреждение: Недопустимо использование в строке подключения адресов типа 127.0.0.1 и localhost.

3.Выполните проверку соединения .

4.Если настройки корректны, нажмите на кнопку . В противном случае отмените изменения и введите корректные данные.

5.Перезапустите все сервисы. Для этого:

I.Перейдите на вкладку Сервисы.

II.Нажмите на кнопку и дождитесь остановки всех сервисов.

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

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

Вкладка Управление событиями

На вкладке Управление событиями (см. рис. 6) пользователь может:

Вручную удалить события до выбранной даты (включительно);

Настроить автоматическое удаление событий.

Рисунок 6 - Утилита RusGuard агент. Вкладка Управление событиями

Рисунок 6 — Утилита RusGuard агент. Вкладка Управление событиями

Для того чтобы удалить события вручную:

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

Активируются все поля ввода дат на вкладке.

2.В поле Удалить события до дд.мм.гггг включительно области Ручное удаление событий введите дату.

Дата вводится при помощи календаря, который всплывает при щелчке мышью внутри поля.

После ввода даты активируется кнопка Удалить события.

3.Нажмите на кнопку Удалить события.

Система начинает процесс удаления. Ход процесса отображается во всплывающем окне.

Для того чтобы настроить автоматическое удаление:

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

Активируются все поля ввода на вкладке.

2.Введите период хранения событий в поле Хранить события за _х_  месяцев области Автоматическое удаление событий.

3.В поле Запускать удаление _чч:мм_ в выберите частоту и время очистки базы данных событий (см. рис. 7).

Рисунок 7 - Утилита RusGuard агент. Вкладка Управление событиями. Настройка автоматического удаления

Рисунок 7 — Утилита RusGuard агент. Вкладка Управление событиями. Настройка автоматического удаления

После ввода даты активируется кнопка . Также активируется кнопка , которая позволяет сбросить введенные данные.

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

Система применит настройки.

Вкладка Лицензии

Рисунок 8 - Утилита RusGuard агент. Вкладка Лицензии

Рисунок 8 — Утилита RusGuard агент. Вкладка Лицензии

На вкладке Лицензии (см. рис. 8) отображается список подключенных лицензий и состояние связанного с ними ПО (например, драйверов).

Понравилась статья? Поделить с друзьями:
  • Ошибка при проверке баланса мтс
  • Ошибка при проверке authorizationmanager
  • Ошибка при проведении транзакции варфрейм
  • Ошибка при проведении платежа 5012
  • Ошибка при проведении 3ds аутентификации что это значит