Концепции проектирования безопасности и аутентификации для совместимой (SOAP, REST) ​​службы WCF

Я хотел бы начать со сценария. Я создал службу WCF настолько, насколько это было возможно, что означает, что у меня есть три конечные точки, одна из которых использует wsHttpBinding (SOAP), которая позже будет использовать транспортную безопасность при настройке моего сертификата, и две webHttpBindings, одна для форматирования JSON, а другая XML-сообщения, где я бы тоже хотел добавить транспортную безопасность.

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

Основным клиентским приложением будет приложение ASP.NET MVC, здесь я был бы очень рад использовать поставщика членства ASP.NET для аутентификации и авторизации внутри моего клиентского приложения и использовать эти учетные данные в запросах WCF. Я мог бы сделать это, но теперь в разработке участвуют другие производители систем, которые могут быть (на данный момент, по крайней мере) и мобильные устройства Android и iOS. Хорошо, что у нас есть конечные точки REST для использования с любыми данными, которые они хотели бы использовать и корректно обрабатывать, что происходит с аутентификацией через конечные точки REST? Я никогда не смог бы использовать поставщика членства ASP.NET из коробки к своему WCF и обрабатывать запросы автоматически, могу ли я?

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

Еще одна вещь, которая приходит мне в голову, - это создание двух разных сервисов (один для приложения MVC и два для REST XML, аутентификация JSON в базе данных при каждом запросе), но я думаю, что это будет кошмаром для сопровождения.

Вы получите идею, любые предложения и мысли приветствуются!

Спасибо.

1 ответ

Почему вы не можете попробовать ServiceStack. Направьте всю свою логику на обслуживание, и клиент станет одностраничным приложением, использующим вашу любимую библиотеку js, например http://angularjs.org/ Полный пример вы можете найти здесь http://razor.servicestack.net/.

Он также поддерживает аутентификацию из коробки для OAuth и аутентификации на основе форм. Хотя есть еще несколько доступных.

Почему не WCF? Есть более чем одна причина. WCF хорош и делает много вещей, которые не нужны для большинства случаев использования. А Servicetack прост в использовании для сценариев этого типа, где логика на сервере. Он по умолчанию поддерживает REST, SOAP 1, SOAP 2, JSON, JSV, XML и т. Д. Он обеспечит вам быстрый старт. А также есть пример Servicestack с Monotouch, поэтому приложение работает на iOS. А также servicetack также предоставляет множество других вещей из коробки. Посетите сайт и дайте мне знать, если понадобятся какие-либо дополнительные детали.