У меня есть две машины, мы назовем их машиной A и машиной B. На машине B запущена служба Windows, написанная на C#.net, в качестве учетной записи локальной системы. Машина A сообщает службе машины B (используя WCF) открыть файл, расположенный в сети. Поскольку локальная система не является пользователем сети, она не имеет доступа к сетевым файлам и не может открыть файл. В настоящее время я читаю файлы с машины A и сериализую их как строки на машину B, а затем записываю их локально на B. Я подумал о создании общей сетевой учетной записи для машины B, чтобы она могла иметь доступ к сети, однако это нежелательно. Есть ли способ заставить машину B открывать файлы, используя учетную запись пользователя машины A? Я взглянул на классы удостоверений субъекта безопасности системы, можно ли их использовать?
Как я могу отправить учетные данные пользователя для использования на удаленном компьютере с помощью WCF?
Ответы (1)
MSDN – Практическое руководство. Выдача себя за клиента в службе
Олицетворение клиента в службе Windows Communication Foundation (WCF) позволяет службе выполнять действия от имени клиента. Для действий, подлежащих проверке списка управления доступом (ACL), таких как доступ к каталогам и файлам на компьютере или доступ к базе данных SQL Server, проверка ACL выполняется для учетной записи пользователя клиента.
Также не забудьте настроить службу для использования проверки подлинности Windows и использовать поддерживаемую привязку.
person
Pop Catalin
schedule
10.08.2009
Хорошо, похоже, у меня это в основном работает, однако, когда я проверяю client.ClientCredentials.Windows.ClientCredentials.UserName, оно кажется пустым. Похоже, это не получает мои учетные данные из Active Directory, но все остальное ведет себя так, как должно.
- person MGSoto; 11.08.2009
@MGSoto, ClientCredentials.Windows.ClientCredentials.UserName предназначен не для получения учетных данных клиента, а для предоставления другого набора учетных данных Windows, если это необходимо (в основном свойство только для набора), чтобы текущий пользователь использовал Environment.UserName или System.Windows. Forms.SystemInformation.UserName... но есть и другие способы
- person Pop Catalin; 11.08.2009
Хорошо, это имеет смысл. Я надеялся, что он покажет мне, что он будет считать вошедшим в систему пользователем. Любая идея, почему я все еще могу получать ошибки отказа в доступе? Я в значительной степени следую MSDN слово в слово, единственная разница в том, что вместо добавления чисел я открываю файл.
- person MGSoto; 11.08.2009