Как настроить безопасность при вызове службы WCF из .Net 2.0 Client - PullRequest
15 голосов
/ 24 октября 2008

У меня запущена служба WCF, и я могу обмениваться данными между этой службой и клиентом .Net 2.0 с помощью basicHttpBinding.

Теперь мне нужно заблокировать службу WCF, чтобы ее могли вызывать только аутентифицированные клиенты.

У меня есть контроль над клиентами, которые будут вызывать мою службу. Клиенты являются частью продукта, который будет установлен в «дикой природе» и «домофоне» для передачи и извлечения данных. Клиентское приложение написано для .Net 2.0 framework и в настоящее время не может быть обновлено до 3.0 или 3.5. Я не могу добавить учетные записи пользователей Windows на клиентские машины.

Каковы мои варианты защиты службы WCF и возможности аутентификации на моих клиентах .Net 2.0? Кроме того, данные должны быть переданы через https.

Я искал в Интернете и чувствую, что я в погоне за диким гусем.

Ответы [ 5 ]

10 голосов
/ 24 октября 2008

Можно настроить конечную точку WCF для использования 2-сторонней аутентификации SSL . Это означает, что вы можете требовать от клиентов предоставления сертификата X.509, подтверждающего их личность, всякий раз, когда они обращаются к службе.

На стороне сервера вы можете использовать одну из встроенных схем проверки в WCF или предоставить собственную логику проверки для проверки сертификата X.509.
Если бы вы размещали свой сервис в IIS, было бы тривиально настроить SSL для запроса клиентских сертификатов на транспортном уровне . Тем не менее, вы можете найти хорошее руководство о том, как реализовать это поведение в собственной службе WCF здесь:

http://leastprivilege.com/2007/08/25/certificate-based-authentication-and-wcf-message-security/

Я не пробовал это сам, но, поскольку это создает требование безопасности на уровне сообщений , я думаю, вам придется использовать wsHttpBinding для принудительного применения его в вашем WSDL контракт, поскольку установление требований безопасности для доступа к веб-службе является частью стандартов WS- *.

Если вам нужно использовать basicHttpBinding , вы можете попробовать это решение вместо этого, которое перемещает вещи на транспортном уровне:

http://leastprivilege.com/2007/08/26/certificate-based-authentication-and-wcf-mode-independent/

Надеюсь, это поможет

4 голосов
/ 24 октября 2008

ОК, с SSL вы получаете безопасность на транспортном уровне; что хорошо, это защищает сообщение от перехвата и изменения.

Так что теперь у вас есть варианты; Вам нужно, чтобы проверка молчала, или вы можете попросить пользователя ввести имя пользователя / пароль при запуске вашей программы? Если он должен быть беззвучным, то вы можете перейти к сертификату на стороне клиента, как уже упоминалось (хотя это болезненно, вам нужно будет самим генерировать сертификаты и проверять их, поэтому вам нужно посмотреть на запуск собственного центра сертификации). Или вы можете встроить в сообщение пользовательский заголовок, который содержит идентификатор клиента и сделать это с помощью ключа.

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

1 голос
/ 02 июня 2009

Вот то, что я в итоге сделал, что казалось самым простым решением в нашей ситуации, которое является довольно небольшим по масштабам с использованием только нескольких веб-сервисов:

  1. Защищенный транспорт с помощью SSL
  2. Клиенты сначала входят в веб-службу, вызывая метод входа в веб-службу. Если вход выполнен успешно, он возвращает зашифрованный билет FormsAuthenticationTicket клиенту.
  3. Клиенты должны затем предоставить билет для проверки подлинности форм при каждом вызове веб-службы. Каждый метод проверяет, является ли заявка действительной, и если да, то выполняет свою работу. Если срок действия билета истек или он недействителен, клиенты должны пройти повторную аутентификацию.

Надеюсь, это кому-нибудь поможет ...

0 голосов
/ 24 октября 2008

Ваша безопасность будет защищена SSL.

Для аутентификации у вас есть два варианта - базовый (имя пользователя и пароль) или сертификат.

Здесь - видео, демонстрирующее настройку проверки подлинности сертификата.

В этом вы настраиваете элементы безопасности базовой привязки HTTP, показанной ниже:







Здесь также есть хорошая страница . Google на clientCredentialType, и вы должны скоро оказаться на правильном пути.

Для настройки клиентских сертификатов вы находитесь после файла политики wse *.

Вам нужно будет решить, как вы будете предоставлять сертификат клиента различным сайтам. Это зависит от проблем безопасности проекта. Существуют различные способы (ни один из которых я не могу вспомнить извините, в последний раз я делал это для wse * to wse * около двух лет назад, поэтому детали забыты, но это, безусловно, возможно, потребовалось несколько дней тщательного исследования, чтобы найти хороший метод ).

0 голосов
/ 24 октября 2008

Использование SSL-сертификата - единственный вариант для клиента .NET 2.0, обращающегося к службе WCF, так как basicHttpBinding не обеспечивает безопасность. Используя SSL, вы защищаете весь транспортный канал.

Проверьте ссылку http://www.codeplex.com/WCFSecurityGuide/Release/ProjectReleases.aspx?ReleaseId=15892. Он охватывает безопасность WCF, охватывающую все сценарии.

Чтобы получить бесплатный сертификат SSL, посетите http://www.comodo.com/ или http://www.instantssl.com/ и попробуйте в вашем приложении.

...