powered by simpleCommunicator - 2.0.41     © 2025 Programmizd 02
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / WCF WMI олицетворение: при соединении по WMI с любым ПК в домене Access Denied
1 сообщений из 1, страница 1 из 1
WCF WMI олицетворение: при соединении по WMI с любым ПК в домене Access Denied
    #37985197
aalyisenkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте Уважаемые!

Есть WCF сервер, который хостится в службе Windows. Служба запущена от имени LocalSystem.
В WCF выполняется процедура, которая обращается по WMI к сетевым компьютерам и записывает статистику в базу данных через Entity Framework.
Клиентское приложение выполняется от имени администратора домена. Необходимо чтобы запросы к сетевым компьютерам происходили от имени того кто запустил клиентское приложение.
Но тут проблемка... Вроде бы олицетворение происходит, потому что соединение с базой устанавливается успешно (SQLEXPRESS с windows аутентификацией) да и в ServiceSecurityContext.Current.WindowsIdentity.Name лежит правильное имя. Но при соединении по WMI с любым компом в домене получаю Access Denied.

Немного кода:

Это в клиенте:

Код: c#
1.
2.
3.
MyServer.MyClient svc = new MyServer.MyClient();
svc.ClientCredentials.Windows.AllowedImpersonationLevel = System.Security.Principal.TokenImpersonationLevel.Impersonation;
svc.ScanWS(WSID);




Это в службе Windows:
Код: c#
1.
2.
3.
4.
5.
6.
7.
WSHttpBinding bind = new WSHttpBinding(SecurityMode.Message,false);
bind.Security.Message.ClientCredentialType = MessageCredentialType.Windows;
Type serviceType = typeof(MyService);
Uri serviceUri = new Uri("http://localhost:8080/");
host = new ServiceHost(serviceType, serviceUri);
host.AddServiceEndpoint(typeof(IMyService), bind, serviceUri);
host.Open();



Это в WCF службе:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
 [OperationBehavior(Impersonation = ImpersonationOption.Required)]
        public bool ScanWS(string WSID)
        {
            try
            {
                //Если здесь запросить ServiceSecurityContext.Current.WindowsIdentity.Name то можно увидеть имя пользователя который запустил клиентское приложение
                MyDBEntities db = new MyDBEntities();
                System.Data.Objects.ObjectQuery<Workstation> ws = db.Workstations.Where("it.WSID=@wsid", new System.Data.Objects.ObjectParameter("wsid", Convert.ToInt32(WSID)));
                string WSName = ws.First().WSName;
                string spath = "\\\\" + WSName + "\\root\\cimv2";
                ManagementPath path = new ManagementPath(spath);
                ManagementScope scope = new ManagementScope(path);
                scope.Options.Impersonation = ImpersonationLevel.Impersonate;
                scope.Connect(); //- вот здесь Отказано в доступе
//......
}
catch
{
}
}


Так вот непонятно куда копать, в чем причина отказа в доступе? Может быть на рабочей станции как-то можно посмотреть? Просмотр логов WMI на тех машинах, к которым соединяюсь ничего не дал, не вижу я там даже от какого имени была попытка соединиться....

Друзья, натолкните на мысль. Заранее спасибо.
...
Рейтинг: 0 / 0
1 сообщений из 1, страница 1 из 1
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / WCF WMI олицетворение: при соединении по WMI с любым ПК в домене Access Denied
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]