Так что я бился головой об этом.У меня есть собственная служба WCF:
var webServiceHost = new WebServiceHost(helloWorld);
webServiceHost.Authorization.ImpersonateCallerForAllOperations = true;
var uri = new Uri(BaseUri + webService.UriDirectory);
var webHttpBinding = new WebHttpBinding(webHttpSecurityMode);
webHttpBinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Windows;
var sep = webServiceHost.AddServiceEndpoint(IHelloWorld, webHttpBinding, uri);
var webHttpBehavior = new WebHttpBehavior {HelpEnabled = true};
sep.Behaviors.Add(webHttpBehavior);
webServiceHost.Open();
Я пошел дальше и применил к своему методу следующие атрибуты:
[OperationBehavior(Impersonation = ImpersonationOption.Required)]
public List<GpoItem> GetAll()
{
using (ServiceSecurityContext.Current.WindowsIdentity.Impersonate())
{
// Execute GPO code here...
return new List<GpoItem>();
}
}
Чтобы добавить немного контекста, я в основном имеювеб-сервис, который позволяет человеку войти на веб-страницу, создать объект групповой политики в домене.Запуск этого в консоли работает нормально, так как я запускаю его как зарегистрированный пользователь домена.Запуск его в качестве службы Windows вызывает исключение «Отказано в доступе».Таким образом, необходимость подражания.Я вставил следующий измененный код выше и получаю «Произошла ошибка операций.(Исключение из HRESULT: 0x80072020) '.Поиск в Google, который покажет мне проблему с разрешением.Я вхожу в среду тестирования веб-службы как администратор, поэтому у меня есть полный доступ, и я показал, что могу запускать его в консоли просто отлично, как администратор.Я чувствую, что мне не хватает какого-либо флага, задающего где-то.
Есть идеи?
[Update1] Я пытался переключить службу с работы в качестве локальной системы насетевой службы, но я все еще получаю ту же проблему.
[Update2] Когда я вхожу в систему на сервере, на котором размещена моя служба WCF (выполняется как локальная система), и использую браузер напрямуюна той машине все отлично работает.Кажется, проблема с делегированием аутентификации пользователей ... здесь пока неизвестно.