Аутентификация и авторизация в многоуровневой архитектуре - PullRequest
2 голосов
/ 19 июля 2010

Мне нужно иметь возможность ужесточить свой бизнес-уровень - доступ к определенным данным. Пользовательский интерфейс может позвонить на бизнес-уровень и получить информацию о пользователе. Пользовательский интерфейс может затем вызвать .Save () для пользователя, а бизнес-уровень вызовет уровень доступа к данным для сохранения пользователя.

Хотя проблема здесь в том, что я не просто хочу, чтобы какой-либо пользователь мог получать данные пользователя и сохранять вызовы - только аутентифицированные пользователи с этой ролью «admin». Как мне выполнить аутентификацию / авторизацию на бизнес-уровне / в пользовательском интерфейсе, чтобы я мог достичь этого?

Я использую ASP.NET для своего пользовательского интерфейса и прочитал информацию о поставщиках членства / ролей, но, похоже, это только для реального пользовательского интерфейса. Мне нужно обеспечить его на своем бизнес-уровне, потому что в будущем может появиться пара различных пользовательских интерфейсов. например окна формы и Asp.net.

Мысли и предложения приветствуются.

Спасибо.

Ответы [ 2 ]

1 голос
/ 19 июля 2010

Другой подход, который вы, возможно, захотите исследовать (если разрабатываете в .NET 3.5 / 4.0), это использовать Windows Identity Foundation .

Если вы заинтересованы в том, чтобы ваша логика авторизации оставалась за пределами вашего веб-сайта (что, я полагаю, вам следует делать, если вы планируете использовать свой бизнес-уровень из более чем одного интерфейса), я определенно рекомендую взглянуть на WIF. Вы также можете интегрироваться с Active Directory, используя ADFS v2.0 (это роль сервера в Windows Server 2008 R2).

Patterns & Practices выпустили руководство , которое может быть весьма полезным для поиска предмета.

0 голосов
/ 19 июля 2010

Поставщики ASP.NET Role / Membership включают компоненты хранения и уровня кода, которые вы можете использовать повторно - это не просто пользовательский интерфейс.

Для детального контроля доступа (например, к конкретным функциям на странице) вы можете использовать корпоративные библиотеки. Вы сможете повторно использовать код для защиты функциональности как на уровне BL, так и на уровне пользовательского интерфейса.

Ссылка, которая вам больше всего нужна, это: Определение того, авторизован ли пользователь для выполнения задачи

Также см .:

Во время предыдущих выпусков EntLibs диспетчер авторизации был ключевым компонентом, но в более поздних версиях это не является жестким требованием, вместо этого вы можете использовать AuthorizationRuleProvider. см .: Разработка приложений с помощью диспетчера авторизации Windows .

Фильтрация данных немного сложнее в зависимости от сложности ваших данных, их объема и потребностей в производительности.

  • Одна стратегия состоит в том, чтобы иметь простой DAL, который возвращает все, и удалять данные, которые текущий пользователь не может видеть в BL.
  • Создайте DAL, обладающий некоторым знанием ролей, которые использует ваше приложение: DAL.GetCustomersForAdmin() и DAL.GetCustomersForMember() Но это немного опасно, так как вы будете привязаны к использованию этих ролей.
  • Иметь базу данных / DAL, которая осведомлена о безопасности и всегда возвращает только те данные, которые пользователю разрешено видеть, теми же методами: DAL.GetCustomers()
...