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

Я хочу позволить удаленным администраторам (с локальными или доменными учетными данными) управлять моей службой 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 олицетворения" привел меня к этому на CodeProject. У меня не было возможности посмотреть, но это может быть путь.

3 ответа

Решение

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

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

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

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

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

Другие вопросы по тегам