Назад | Перейти на главную страницу

Ошибка межсерверной проверки подлинности NTLM

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

У меня есть приложение MVC4, размещенное в IIS 7.5 на сервере Windows 2008 R2 (назовем его WS1). Он использует службу WCF на втором идентичном сервере (WS2). Также на WS2 это установка SharePoint 2007. Служба WCF взаимодействует с SharePoint и поэтому должна работать от имени пользователя, имеющего доступ к моему сайту SharePoint. По этой причине служба WCF настроена на использование проверки подлинности Windows с NTLM в качестве единственного поставщика проверки подлинности Windows (необходимого для SharePoint). Приложение MVC4 на WS1 также настроен для проверки подлинности Windows, NTLM в качестве единственного поставщика и имеет соответствующие параметры безопасности конечных точек WCF:

<binding name="SpBasicHttp" ... >
  <security mode="TransportCredentialOnly">
    <transport clientCredentialType="Ntlm" />
  </security>
</binding>

WS1 и WS1 обе являются виртуальными машинами, и хотя они не обязательно находятся на одном хосте, они являются в том же домене.

Теперь, когда я пытаюсь вызвать метод веб-службы из WS1 к WS2, Я получаю следующую ошибку:

Веб-службы Sharepoint - HTTP-запрос неавторизован со схемой аутентификации клиента «Ntlm». Заголовок аутентификации, полученный от сервера, был NTLM.

Фу. Итак, я включил аудит NTLM на WS2 и я обнаружил, что в основном запрос проверки подлинности NTLM не достигает этого сервера во время вызова веб-службы.

Теперь, если я разверну приложение MVC4 в WS2 и ничего не менять, кроме URL-адреса конечной точки службы WCF, все работает отлично. Проверка подлинности Windows через NTLM работает безупречно, и в средстве просмотра событий четко видна запись аудита проверки подлинности NTLM. Это выглядит как:

Audit NTLM authentication in this domain
User: billybob
Domain: xyz
Workstation: MY-COMPUTER-NAME
PID: 4
Process: 
Logon type: 3
InProc: true
Mechanism: (NULL)

Ни на одном компьютере нет параметров групповой политики, предотвращающих исходящие или входящие запросы NTLM. Сеть, в которой я разрабатываю, не настроена для Kerberos, поэтому, к сожалению, это не вариант. У меня также нет доступа к Active Directory.

Итак, с точки зрения администрирования сервера, что могло бы остановить запрос проверки подлинности NTLM на своем пути между двумя серверами, где он отлично работает только на одном сервере?

Похожие вопросы: