2010-12-10 2 views
0

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

Это связано с моим предыдущим вопросом на Restricting WCF TCP endpoint to Administrators. Вместо добавления [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, если Denied результат доступа был возвращен, так что я могу возобновить соединение в качестве другого принципала?

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


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

ответ

1

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

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

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

+0

Спасибо. [Этот вопрос] (http://stackoverflow.com/questions/1596161/how-to-show-authentication-dialog-in-c-net-3-5-sp1) предоставляет собственное приглашение, хотя и со старым взглядом. – 2010-12-10 13:22:39

0

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

+0

Нет, это служба Windows и клиент это приложение Windows Forms. Поэтому нет IIS. – 2010-12-10 12:40:14

Смежные вопросы