Аутентификация форм: есть разные учетные данные для подкаталога? - PullRequest
4 голосов
/ 16 марта 2010

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

Скажем, например, у меня есть пользователи для веб-сайта, хранящиеся в таблице «Пользователи» в базе данных. Но для подкаталога я хочу, чтобы пользователи были взяты из таблицы «SubdirUsers». Который, вероятно, имеет совершенно другую структуру.

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

  1. Вход на весь веб-сайт также не позволяет войти в подкаталог
  2. Нажатие «Выйти» на всем сайте не отменяет ваш логин в подкаталоге
  3. и наоборот

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

Я также не хочу просто добавить флаг в таблицу «Пользователи», указывающий, является ли это пользователь всего сайта или пользователь подкаталога. Списки пользователей должны приходить из разных источников.

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

Кто-нибудь может предложить лучшую альтернативу?

Ответы [ 7 ]

1 голос
/ 17 марта 2010

В подпапке может быть отдельный файл web.config, который содержит только параметры проверки для этой подпапки. Обратите внимание, что вы должны удалить все остальные настройки, так как есть некоторые настройки, которые могут быть только на уровне приложения.

<authorization configSource="alterativeSource.xml"/>
1 голос
/ 16 марта 2010

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

if (Membership.Providers["myprovider"].ValidateUser("USER", "PWD")) {

  //your code

}
0 голосов
/ 01 апреля 2010

Я не пробовал это, но я думаю, что это будет работать.

У вас может быть два поставщика членства (то есть ASPNETDB_1 и ASPNETDB_2.)

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

В корне сайта, я полагаю, у вас не будет аутентификации по формам.У вас может быть только стартовая страница, которая просит пользователя выбрать, какой подкаталог (или вы можете просто использовать субдомены (firstdir.mysite.com, secondir.mysite.com) или http: /mysite.com/firstdirectory или http: / mysite.com / secondirectory.

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

Я понимаюВы ищете решение «из коробки» и не хотите «раскручивать свое». Однако стандартный поставщик членства позволяет вам создать профиль для каждого пользователя - тогда его действительно легко настроить.пользовательская форма обслуживания со списком для каждой из ваших отдельных функций обслуживания пользователей и фильтрацией по роли или по значению профиля (например, по организационному идентификатору). Используя классы поставщика членства, я лично нашел, что это очень легко сделать из коробки (может быть,час создания основных форм, если для этого используются все элементы управления перетаскиванием, SqlDatasource + listview - не требуется кодирование VB или C).Но отдельные провайдеры и веб-конфигурации тоже справятся с этой задачей.

0 голосов
/ 20 марта 2010

Это может вам помочь - numina.codeplex.com

0 голосов
/ 17 марта 2010

Обычно «авторизация» используется после входа в систему, чтобы определить, какие каталоги, ресурсы и т. Д. Могут быть использованы данным пользователем.

Рассматривали ли вы создание роли для «основного» каталога и второй роли для «вложенного» каталога, а затем применяете тег авторизации (т. Е. В файле web.config)? Вам нужно будет внедрить поставщика авторизации, но похоже, что это может быть лучшим долгосрочным решением, чем наличие нескольких пользовательских таблиц.

Разъяснение Независимо от авторизации (т. Е. Проверка учетных данных или пароль и т. Д.) Вам все равно нужно будет где-то определять роли пользователя, поэтому в качестве аргумента давайте предположим "таблицу пользователей". (Ничто не мешает этому быть XML-файлом в изолированном хранилище, если хотите.) NB На самом деле не имеет значения, что пользователи приходят из разных источников. Это должно быть отражено в схеме для пользовательской таблицы (т. Е. Флаг или другой столбец и т. Д.). Если вы будете бороться с этим общим паттерном, вы, вероятно, в конечном итоге будете выполнять больше работы.

Когда есть одно исключение, в будущем вероятно будет другое ...

0 голосов
/ 17 марта 2010

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

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

0 голосов
/ 16 марта 2010

Вы просто не сможете достичь этого только с помощью FormsAuthentication.

Этот проблемный сценарий идеально подходит для использования HttpModules. HttpModules могут перехватывать конвейер запросов и ответов. Вам нужно будет написать 2 HttpModules.

  1. Модуль Http для аутентификации
  2. HttpModule для авторизации

Вы можете объединить эти модули в один позже, когда ваше решение достигнет стабильного состояния, и вы сможете справиться со сложностью.

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

Вы можете начать с здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...