Ограниченная удаленная служба WCF: запрос проверки подлинности Windows - PullRequest
0 голосов
/ 10 декабря 2010

Я хочу позволить удаленным администраторам (с локальными или доменными учетными данными) управлять моей службой Windows через привязку WCF TCP. Для этого мне нужно аутентифицировать удаленного пользователя как администратора. Я могу проверить основного пользователя / роли, но не знаю, как запросить у удаленного пользователя правильные данные пользователя / токен.

Это связано с моим предыдущим вопросом о Ограничение конечной точки WCF TCP для администраторов . Вместо добавления [PrincipalPermission(SecurityAction.Demand, Role = "Administrator")] к моему методу ограниченного обслуживания и перехвата SecurityException, кажется, я могу проверить это с помощью:

if (!System.Threading.Thread.CurrentPrincipal.IsInRole("Administrators"))
    return MethodResult.AccessDenied;
// haven't tested if it's the service thread or the remote user yet.

Как запросить у удаленного пользователя проверку подлинности Windows, если был возвращен результат «Отказано в доступе», чтобы я мог повторно инициализировать соединение как другой участник?

Конечно, изменение должно быть осуществлено в клиентском приложении удаленного пользователя. Возможно, есть более чистый WCF способ сделать это?


Редактировать: Поиск "олицетворения .net" привел меня к this в CodeProject. У меня не было возможности посмотреть, но это может быть путь.

Ответы [ 3 ]

1 голос
/ 10 декабря 2010

Вам необходимо передать учетные данные пользователя при вызове WCF.Обычно клиентское приложение просто «захватывает» учетные данные текущего запущенного пользователя.В качестве альтернативы вы можете указать имя пользователя и пароль явно.Поэтому вы можете запросить у пользователя альтернативный набор учетных данных, если хотите.

В любом случае клиентское приложение должно запросить у пользователя.Ваш вызов WCF должен вернуть ошибку (код или исключение) при неудачной авторизации, и ваш клиент должен зафиксировать этот возврат и отобразить приглашение для пользователя и повторить попытку с новыми учетными данными.WCF сам по себе не может обработать запрос пользователя.

Вот статья о различных способах передачи учетных данных:
http://blogs.msdn.com/b/sonuarora/archive/2007/04/21/setting-client-credentials.aspx

0 голосов
/ 10 декабря 2010

Вот как вы можете запросить пользователя, используя стандартный диалог Windows, используя pInvoke Как показать диалог аутентификации в C # .Net 3.5 SP1

0 голосов
/ 10 декабря 2010

Предполагая, что это размещено в IIS, вам необходимо отключить анонимную аутентификацию в IIS Manager. Это должно заставить пользователя войти в систему с учетной записью Windows. Вам также может понадобиться включить олицетворение ASP.NET.

...