Какая разница в WCF между Ntlm и NTLM, и как я могу это исправить? - PullRequest
2 голосов
/ 23 декабря 2011

У меня есть служба WCF, работающая на IIS 6, с интегрированной аутентификацией и олицетворением с использованием NTLM.

Соответствующие части Web.Config

  <system.web>
    <identity impersonate="true"/>
    <customErrors mode="Off"></customErrors>
  </system.web>
    <system.serviceModel>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
    ...
  </system.web>
  ...
  <wsHttpBinding>
    <binding name="wsHttpEndpointBinding">
      <security mode="Transport">
        <transport clientCredentialType="Ntlm" />
      </security>
    </binding>
   </wsHttpBinding>

Я только что добавил aspNetCompatibility, потому что я хочу знать, кто является пользователем, вошедшим в систему (по крайней мере, в отношении IIS). Из нескольких сделанных мной поисков вы получили пользователя.

Что ж, после добавления этой строки и публикации моего сервера я получаю, возможно, самую глупую ошибку, которую я когда-либо видел:

HTTP-запрос не авторизован с помощью схемы аутентификации клиента 'Ntlm'. Заголовок аутентификации, полученный от сервера, был 'NTLM'.

Я подумал: «Ну, очевидно, они делают очень чувствительное к регистру сравнение». Поэтому я искал все свое клиентское решение для Ntlm и заменил все не переменные вхождения на NTLM. Не повезло.

Моя основная задача, конечно же, получить любого пользователя, прошедшего аутентификацию через IIS + NTLM. Если я пойду не так, я буду счастлив узнать о более простом / лучшем способе. В противном случае, как мне сказать моему клиенту (или моему серверу), что все в порядке, чтобы идти вперед и проходить аутентификацию?

Ответы [ 2 ]

2 голосов
/ 17 мая 2012

Еще одна возможность, если вы сталкиваетесь с этой ошибкой, - это проблема с проверкой петли с NTLM.У меня есть служба, которая работает автономно на не доменном (рабочая группа) сервере.WCF настраивается с использованием BasicHttpBinding с режимом безопасности транспорта и учетными данными клиента Ntlm.При попытке доступа к сервису с помощью https://servername он прекрасно работает.Если я пытаюсь получить к нему доступ с помощью полного доменного имени (https://servername.domain.com), происходит сбой с той же ошибкой:

The HTTP request is unauthorized with client authentication scheme 'Ntlm'. The authentication header received from the server was 'NTLM'.

Если вы загляните в журнал безопасности Windows, вы увидите сбой аудита с событием 4625.при этом вы увидите следующую информацию об ошибке:

Failure Information:
Failure Reason: An Error occured during Logon.
Status:         0xc000006d
Sub Status:     0x0

Чтобы решить эту проблему, вам нужно либо добавить имена хостов обратного соединения (предпочтительно), либо отключить проверку обратной связи .Это было улучшение безопасности, добавленное для NTLM в Windows Server 2003 SP1 и более поздних версиях, чтобы закрыть вектор атаки на протокол.Исправление, однако, вызывает много неясных сообщений об ошибках, подобных этому, из WCF и продолжает преследовать меня многими неясными способами по сей день.

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

Старт Здесь . Это должно решить вашу проблему

...