Мы пытаемся реализовать 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). Это правильно, или я что-то упустил? Или есть другие альтернативы, о которых я не знаю?
Спасибо за вашу помощь!