У меня есть веб-служба WCF (размещенная в моей службе Windows под учетной записью локальной системы). К веб-методам прикреплено [OperationBehaviorAttribute(Impersonation = ImpersonationOption.Required)]
. NTLM аутентификация используется.
В реализации моего веб-метода я выдал себя за вызывающего и сделал кое-что. Для этого я использую ServiceSecurityContext.Current.WindowsIdentity
. Если я не укажу правильные учетные данные при вызове веб-метода, веб-служба выдаст «401 Unauthorized».
Когда я вызываю метод из Chrome, идентификация и подражание Windows работают отлично. Я могу создать новый процесс под олицетворенным пользователем, который будет появляться в сеансе Windows этого пользователя (отличается от 0). Firefox также работает, когда я добавляю строку «localhost» в настройку network.automatic-ntlm-auth.trusted-uris
. Но когда SoapUI вызывает метод, это удостоверение Windows не устанавливается должным образом. Вызывается веб-метод, поэтому NTLM работает в определенной степени, но он не работает должным образом. Вызов ServiceSecurityContext.Current.WindowsIdentity.Owner.IsAccountSid()
возвращает false (Owner
не учетная запись пользователя, а встроенная группа «Администраторы»). Создание нового процесса во время олицетворения создаст его в сеансе Windows 0.
Я рассмотрел HTTP-связь с Wireshark, и рукопожатие NTLM выглядит по-разному в Chrome и SoapUI. Хотя понятия не имею, что делать с этой информацией.
Как заставить SoapUI правильно работать с моим веб-сервисом и NTLM?