Использование провайдера членства .NET в многоуровневом веб-приложении

В настоящее время я создаю n-уровневое веб-приложение, в основном для практики новых технологий и шаблонов - репозиториев, uow, сервисов, ioc, ef4 и mvc3.

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

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

Теперь, очевидно, я собираюсь использовать это в веб-приложении mvc3, но мне интересно, могу ли я использовать это и на своем сервисном уровне? Может ли кто-нибудь указать мне на какие-либо статьи или сообщения в блоге?

NB. Извиняюсь, если я констатирую очевидное, однако я просто хотел прояснить, что, когда я имею в виду свой сервисный уровень, я не имею в виду WCF; это мои собственные классы, которые учитывают шаблон уровня обслуживания - http://martinfowler.com/eaaCatalog/serviceLayer.html . Сказав это, я, возможно, пожелаю предоставить этот сервисный уровень через сервисы WCF позже.

Я уже пару часов гуглю и ничего не придумал!

Любая помощь очень ценится.


person jameskind    schedule 22.01.2011    source источник


Ответы (2)


Это серия статей из 18 частей от Скотта Митчелла.

Это очень подробное объяснение всех функций, касающихся поставщиков аутентификации, авторизации и членства в asp.net. Я никогда не нашел лучшего источника по этому вопросу от того же автора.

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

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

person Lorenzo    schedule 22.01.2011
comment
Спасибо за эту ссылку, однако вы говорите, что я могу реализовать аутентификацию в своих репозиториях. Возможно, я ошибаюсь, но это не похоже на подходящее место для аутентификации - с точки зрения SoC репозитории должны нести ответственность только за операции CRUD над сущностями. Я думаю, что лучшим местом для аутентификации является уровень службы (т. е. место, где находится логика приложения), и как мне передать текущего пользователя и его разрешения из веб-приложения MVC на уровень службы. Я надеюсь, что в этом есть смысл. Сейчас начну читать ссылку, спасибо! - person jameskind; 22.01.2011
comment
Да, это имеет смысл. Но вы всегда можете использовать Membership.GetUser(HttpContext.Current.User.Identity.Name) для получения пользователя на основе текущего имени удостоверения. ;) - person Lorenzo; 22.01.2011

Один из способов сделать это — создать класс «SecurityContext», который содержит имя пользователя, удаленный IP-адрес и т. д. Затем создайте класс агента, который действует как прокси-класс для ваших служб WCF. В классе агента вы можете создать контекст безопасности со статическим классом. Затем вы можете передать этот SecurityContext на другие уровни для всех методов службы, которым требуется безопасность. Таким образом, он достаточно гибок, чтобы выполнять аутентификацию на внешнем интерфейсе, аудит и т. д. на уровне домена/бизнес-логики.

person Blane Bunderson    schedule 01.02.2011