2010-09-21 6 views
21

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

ответ

7

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

+5

Как узнать, действительно ли это проблема? – Maritim

+0

@Maritim: Хороший вопрос. Глядя на необработанный HTTP-запрос - это лучший способ, который я знаю - например. путем регистрации его, если он еще не регистрируется: тогда должен отсутствовать заголовок SOAP (элементы). – J0e3gan

27

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

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

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

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

http://blogs.microsoft.co.il/blogs/urig/archive/2011/01/23/wcf-quot-an-error-occurred-when-verifying-security-for-the-message-quot-and-service-security-audit.aspx

+7

Это отличный диагностический отзыв! Спасибо, что поделился. – Tedford

+1

Это действительно отличный совет. Оказалось, что мне не хватает DLL, как описано здесь: http://stackoverflow.com/questions/14033193/entity-framework-provider-type-could-not-be-loaded#comment29085393_15358941 – ArieKanarie

+1

Хотелось бы, чтобы я мог увеличить это больше, чем один раз! Полдня, пытаясь получить реальное сообщение об ошибке. –

0

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

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

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

15

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

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

+4

Большое вам спасибо! Я вытягивал свои волосы, задаваясь вопросом, что это за проблема! – CodeCanuck

+0

Рад, что это не только я @ Stealth22 :) – ashes999

+3

Мой сервер и клиент были на одинаковых часах. Клиентские часы были настроены автоматически, но серверные часы были установлены вручную. Я активировал «Установить время автоматически» на сервере, и проблема решена. – Oktay

-4

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

0

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

Я, наконец, отследил его до 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
клиента:
ID действия:
ArgumentNullException: Значение не может быть пустым.
Имя параметра: manager

0

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

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

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

клиента:

ID действия:

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

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

Смежные вопросы