Межсерверная аутентификация 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 на его пути между двумя серверами, где он просто отлично работает, ограниченный одним сервером?
Подобные вопросы: