Все три машины находятся в одном домене
- Машина 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)
{
}
И все же мы столкнулись с этой проблемой.