2013-08-19 3 views
0

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

Пример:

http://www.mydomain.com/webservices/holidays.svc/GetHolidaysForUser?id=1234 

Этот пример просто оставить строку JSON обратно в браузер без аутентификации, что-так всегда.

К сожалению, WCF - это то, с чем я не слишком знаком, поэтому я понятия не имею, с чего начать.

ПРИМЕЧАНИЕ: Я попросил, если возможно, использовать проверку подлинности с помощью форм.

+0

Вы знаете/управления клиентами, потребляющих эту услугу ФОС? – rene

+0

У меня есть идея, с которой вы можете начать: [Основы безопасности WCF] (http://msdn.microsoft.com/en-us/library/ff650862.aspx). – rene

+0

@rene, клиенты в каком отношении? (машины, браузеры, домены, компании) и т. д.? - В настоящее время только пользователи, которые подписались на приложение, должны иметь доступ к услугам, но мы не обязательно контролируем, как они обращаются к приложению (например, к конкретным машинам, планшетам и т. Д.). – series0ne

ответ

0

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

1

Одним из вариантов является использование клиентских сертификатов.

Это решение может быть вариантом, если вы не можете изменить текущую реализацию (что необходимо, если вы идете по пути «Аутентификация форм»). Помните, что для работы с сертификатами ИТ-операция должна генерировать и устанавливать сертификаты как на сервере, так и на клиентах. Если это возможно в вашей ситуации, непонятно из вашего вопроса.

Сначала нужно создать сертификаты (если вы не покупаете, но их генерации вашей собственной личности убедитесь, что ИТ ребята prepaired добавить свой корневой сертификат в хранилище доверенного, это также верно для пользователей вашей службы!)

Добавить это поведение конечных точек на клиентской

<behaviors> 
     <endpointBehaviors> 
     <behavior name="ClientCertificateBehavior"> 
      <clientCredentials> 
      <clientCertificate findValue="client.com" 
           storeLocation="CurrentUser" 
           storeName="My" 
           x509FindType="FindBySubjectName" /> 
      </clientCredentials> 
     </behavior> 
     </endpointBehaviors> 
    </behaviors> 

добавить/изменить этот ServerSide:

<wsHttpBinding> 
     <binding name="wsHttpEndpointBinding"> 
     <security mode="Transport"> 
      <transport clientCredentialType="Certificate" /> 
     </security> 
     </binding> 
    </wsHttpBinding> 

<endpoint binding="wsHttpBinding" bindingConfiguration="wsHttpEndpointBinding" 
     name="wsHttpEndpoint" contract="IService" /> 

настроить свой веб-сервер для использования SSL и символом, Сертификаты клиентов.

Этот ответ a shortend version of this guide

+0

Можно использовать формы auth с WCF. Служба WCF, размещенная в IIS, может использовать всю инфраструктуру ASP.NET, включая проверку подлинности форм. Таким образом, вы можете настроить службу для использования файлов cookie для аутентификации. См. Соответствующую запись [здесь] (http: // stackoverflow.com/questions/1087271/pass-formsauthentication-cookie-to-a-wcf-service) и [здесь] (http://dotnetspeak.com/2012/01/securing-wcf-with-forms-authentication) – 0leg

+0

@ 0leg Я не утверждаю, что проверка подлинности форм невозможна. Учитывая контекст OP, я постарался предоставить решение, которое обеспечило бы то, что ему нужно только по конфигурации, относительно быстро и без необходимости изменения кода. Две ссылки, которые вы предоставили, поддерживают мою линию рассуждений, но если я что-то пропустил, я открыт для предложений. – rene

+0

Хотя опция сертификата исключает изменения кода, она добавляет много головных болей от администрирования. Каждому браузеру, который связывается с сервисом, должен быть установлен сертификат (включая root) на этом компьютере. Это практично только в контролируемой корпоративной среде. Сертификат также истекает периодически и его необходимо переустановить. – 0leg