У меня есть служба 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. Если я пойду не так, я буду счастлив узнать о более простом / лучшем способе. В противном случае, как мне сказать моему клиенту (или моему серверу), что все в порядке, чтобы идти вперед и проходить аутентификацию?