Аутентификация с использованием подхода SOA с использованием C # - PullRequest
6 голосов
/ 08 марта 2011

Я перестраиваю сайт и пытаюсь использовать SOA-подход. Текущий веб-сайт находится в .NET 2.0 и использует готовый SqlMembershipProvider.

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

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

Должны ли мы отказаться от модели членства .NET и пойти с чем-то вроде OpenId, и просто позволить пользователям повторно подключить свои данные к новой учетной записи?

Я провел некоторые поиски и не могу найти много о том, как с этим справиться, хотя я знаю, что это было сделано раньше.

Ответы [ 3 ]

1 голос
/ 24 марта 2011

Вот что я в итоге сделал, если кому-то интересно.Я начал использовать службы аутентификации WCF, но потом понял, что это не дает мне все, что я хотел.Я мог входить и выходить из системы, но мне все равно придется создавать свои собственные методы для регистрации и получения MembershipUser.

Поэтому я пошел в свою библиотеку ServiceContracts и создал интерфейс, который я назвал IMembership.Сначала я создал его как класс и унаследовал от MembershipProvider, чтобы я мог получить все заготовки методов, сгенерированные для меня.Как только они были сгенерированы, я изменил заглушки и превратил их в интерфейс.

Затем я вошел в свою библиотеку служб и создал реализацию интерфейса, которая была простой, потому что для реализации я просто использовал Membership.Provider....

Затем в своей библиотеке клиентов поставщиков услуг я выполнил обычную реализацию интерфейса IMembership, также унаследованного от ClientBase <>.Прямо рядом с ним я создал WCFMembershipProvider, который реализовал MembershipProvider и вызвал методы только что созданного MembershipClient.

В моем WebApp, в котором размещаются службы WCF, я настроил своего поставщика SQL Membership в web.config., а затем создал файл svc и конечные точки для службы.

В веб-приложении-потребителе я просто добавил ссылку на клиент службы в svc, а затем настроил поставщика членства для моего WCFMembershipProvider.

И альт - я в деле.

Много повторяющегося кода, но он хорошо работает.

0 голосов
/ 11 марта 2011

Трудно дать конкретный ответ, не зная немного больше о желаемой настройке.

Планируете ли вы представить свою службу WCF общедоступной независимо от вашего веб-сайта?Будут ли ваши веб-страницы получать доступ к вашей службе WCF напрямую через AJAX?

Самым простым сценарием, вероятно, является строгий многоуровневый интерфейс развертывания, который общается только с Веб-сайтом, только веб-сайт общается со Службой WCF.

http://msdn.microsoft.com/en-us/library/ms731049.aspx - хорошее прочтение по использованию модели членства ASP.NET с WCF.

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

Если вы уже вложили средства в сбор учетных данных пользователя для работы с поставщиком SQLMembership, вы можете использовать его через ADFS+ модель, основанная на претензиях.Это будет работать со всеми 3 вышеупомянутыми сценариями.Хотя есть немного научиться делать

0 голосов
/ 09 марта 2011

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

Ваш вопрос, однако, больше касается аутентификации. Я не знаю, что вы могли бы заставить реализацию OpenId работать через WCF (хотя я понимаю, что она отлично работает для старого ASPX). Вы можете использовать простую схему аутентификации по имени пользователя и паролю (возможно, используя MembershipProvider вручную, если вам это нужно для работы с шифрованием пароля в базе данных), и вы можете передать имя пользователя и пароль через службу, используя (скорее всего) Transport безопасность (SSL).

Надеюсь, это поможет. Может быть, кто-то придумал более стандартную замену состояния сеанса для WCF, но я не знаю об этом, если так.

...