Проблема делегирования полномочий с WCF - PullRequest
2 голосов
/ 24 июня 2011

Usage Scenario Все три машины находятся в одном домене

  • Машина 1 - имеет приложение, которое выполняется под пользователем 1, откуда генерируется запрос
  • Машина 2- Служба Windows, запущенная в сетевой службе, в которой размещаются службы WCF, с использованием WSHttpBinding
  • Машина 3 - Общая папка, в которой пользователь user1 имеет право на запись в папку

В идеале WSHttpBindingавтоматически передает контекст безопасности из приложения в службу WCF, и, следовательно, он должен иметь возможность записать файл в общее местоположение.Потому что, если мы напрямую попытаемся записать файл из приложения на компьютере 1 в общий ресурс Machien 3, он будет успешным.

Но, к нашему удивлению, он не сможет записать файл в общее местоположение,через Сервис.Мы получаем «Отказано в доступе»

Как я уже сказал, мы используем WSHttpBinding, и в идеале пользовательский контекст передается в Сервис.На клиенте, то есть на компьютере 1, уровень олицетворения устанавливается как System.Security.Principal.TokenImpersonationLevel.Impersonation;Таким образом, сетевая служба может выдавать себя за домен \ user1.Достаточно ли этого, чтобы записать в папку на 3-й машине?

Или мы должны установить уровень олицетворения клиента как System.Security.Principal.TokenImpersonationLevel.Delegation?(Мы попробовали и то, и другое, но это не сработало)

Также еще одна информация: машина 2 «доверена для делегирования».SPN настроен для этой машины в контроллере домена.

Контракт на работу объявлен как

[OperationBehavior(Impersonation = ImpersonationOption.Required)] 
public void WriteData(string content) 
{ 

}

И все же мы столкнулись с этой проблемой.

1 Ответ

1 голос
/ 24 июня 2011

Для этого вам нужно делегирование .Олицетворение имеет только локальную область видимости на компьютере 2.

...