Включение проверки подлинности Forms для нескольких вложенных папок на сайте - PullRequest
0 голосов
/ 04 мая 2009

Мы пытаемся реализовать formAuthentication на нашем сайте, но в сценарии, для которого нам пока не удалось найти решение - кроме создания нашего собственного HttpModule и выполнения собственной логики - поэтому я подумал, что d бросить вопрос там, чтобы видеть, было ли это действительно единственным решением.

Мы хотели бы использовать formAuthentication поверх пользовательских провайдеров членства, но хотели бы использовать другого провайдера для разных папок. Наш сайт разбивает эти разделы на подпапки (например, ~ / Admin, ~ / GoldCustomer, ~ / SilverCustomer, ~ / BronzeCustomer), поэтому мы хотели бы использовать разных провайдеров членства для каждого раздела / подпапки. Используя фреймворк для поддержки этого, мы реализовали бы наш web.config как:

<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
<location path="Admin">
<system.web>
  <authentication mode="Forms">
    <forms name="AdminAuth" loginUrl="~/AdminLogin.aspx" />
  </authentication>
  <membership defaultProvider="AdminProvider" >
    <providers >
      <add connectionStringName="ConnString" name="AdminProvider" type="Assembly.AdminMembershipProvider" ... />
    </providers>
  </membership>
</system.web>
</location>
<location path="GoldCustomer">
  <system.web>
  <authentication mode="Forms">
    <forms name="GoldCustomerAuth" loginUrl="~/GoldCustomerLogin.aspx" />
  </authentication>
  <membership defaultProvider="GoldCustomerProvider" >
    <providers >
      <add connectionStringName="ConnString" name="GoldCustomerProvider" type="Assembly.GoldCustomerMembershipProvider" ...="" />
    </providers>
  </membership>
</system.web>
</location>
<system.web>
  <compilation debug="true" />
  <authentication mode="Forms" />
</system.web>
</configuration>

Это может привести к ошибке времени выполнения:

Ошибка использовать раздел, зарегистрированный как allowDefinition = 'MachineToApplication', за пределами уровня приложения. Эта ошибка может быть вызвана тем, что виртуальный каталог не настроен как приложение в IIS.

Line 11:   <location path="Admin">
Line 12:     <system.web>
Line 13:       <authentication mode="Forms">
Line 14:         <forms name="FormsAdmin" loginUrl="~/login.aspx" />
Line 15:       </authentication>

Похоже, что единственный способ выполнить то, что мы пытаемся, - это использовать собственный HttpModule или изменить наш подход (например, разбить папки на разные веб-приложения в IIS). Это правильно, или я что-то упустил? Или есть другие альтернативы, о которых я не знаю?

Спасибо за вашу помощь!

Ответы [ 2 ]

1 голос
/ 04 мая 2009

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

Альтернативным решением могут быть формы входа в шлюз, которые перенаправляют пользователя в специальную форму входа в папку на основе переменной ReturnUrl querystring, и эта форма будет использовать провайдера, которого она хочет подтвердить пользователем. Затем он использует FormsAuthentication.RedirectFromLoginPage для установки файла cookie аутентификации и перенаправления на предыдущую страницу. Вы можете установить роли и использовать безопасность на основе ролей для управления доступом к каждой папке с тегом <authorization> в web.config.

0 голосов
/ 04 мая 2009

Я не уверен, что вы пытаетесь сделать, но как насчет ролей для каждого из этих типов клиентов? Ограничьте доступ по роли для каждой подпапки, но у вас все еще будет 1 поставщик членства и 1 поставщик роли.

...