Как настроить безопасность при вызове службы WCF с .Net 2.0 Client

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

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

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

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

Я искал в Интернете и чувствую, что я нахожусь на дикой гусиной погоне.

Ответы

Ответ 1

Вы можете настроить конечную точку WCF для использования двухсторонней аутентификации 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/

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

Ответ 2

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

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

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

Ответ 3

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

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

Надеюсь, что кто-то поможет...

Ответ 4

Использование 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/ и попробуйте в своем приложении.

Ответ 5

Безопасность будет покрыта ssl.

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

Здесь - это видео, которое демонстрирует настройку аутентификации сертификата.

В этом случае вы настраиваете элементы безопасности basicHttpBinding, показанные ниже:

<BasicHttpBinding>
     < binding name= "basicHttp" >
         < режим безопасности = "TransportWithMessageCredential" >
             < message clientCredentialType = "Сертификат" /" >
         </безопасность >
     </связывание >
 </BasicHttpBinding>

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

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

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