2015-01-14 3 views
2

У меня есть многослойная asp.net MVC приложение, состоящее из следующих уровней:Лучший способ обезопасить службу WCF при использовании из ASP.NET MVC приложения

  • базы данных (хранимые процедуры, представления и таблицы)
  • WCF сервис (содержащий бизнес-логику и подключение к базе данных через Entity Framework)
  • ASP.NET MVC приложения, связываясь со службой WCF и генерации HTML
  • Browser

Конечные пользователи аутентифицируются на уровне asp.net mvc, используя Identity 2.0.

Веб-сервер является единственным клиентом службы WCF.

Есть ли лучшие практики для этого сценария?

Веб-сервер и служба WCF могут работать в разных местах, поэтому мы не можем использовать протоколы интрасети.

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

В соответствии с этим, Improving Web Services Security: Scenarios and Implementation Guidance for WCF, есть два варианта для обеспечения транспортной безопасности по сети Интернет:

  • Базовая аутентификация с BasicHttpBinding
  • аутентификации
  • сертификат с WsHttpBinding

Какой бы лучше всего подходит для этот сценарий, где в основном есть только один клиент для службы WCF?

В связи с отсутствием характера безгражданства http для каждого нового запроса на веб-сервер создается экземпляр нового прокси-сервера.

Есть ли способ кэшировать информацию аутентификации из службы WCF на вызывающем веб-сервере для повышения производительности?

ответ

0

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

BasicHTTPBinding - это общий протокол WCF, который будет принимать любой правильно отформатированный HTTP-запрос (Gets/Post), независимо от того, поступает ли запрос с компьютера Windows или в мир JAVA/PHP. Это также, как вы говорите, без гражданства. Это делает работу с базовым HTTTPсвязыванием хорошей для ситуаций взаимодействия, но более сложной (чем wsHTTPBinding) при установлении связи между двумя MS-центрическими системами.

По умолчанию, например, NONE является шифрованием по умолчанию для BasicHttpBinding. По моему опыту, добавление транспорта требует программирования и большого количества проб и ошибок. BasicHttpBinding также не поддерживает транзакции или сеансы, в то время как WSHttpBinding делает. Таким образом, на основе вашего описания WSHttpBinding будет проще и проще в настройке и обслуживании в долгосрочной перспективе. Но вы можете также рассмотреть NetTCPBinding, так как вы переходите от сервера к серверу.

Ниже вы найдете отличный сайт MS, в котором объясняются все различные протоколы WCF, в том числе и за плюсы и минусы каждого подхода.

http://msdn.microsoft.com/en-us/library/ms730879.aspx

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