为站点中的多个子文件夹启用FormsAuthentication

时间:2009-05-04 18:01:04

标签: asp.net-membership

我们正在尝试在我们的网站上实现formsAuthentication,但是在我们还没有找到解决方案的场景中 - 除了创建我们自己的HttpModule并自己做自定义逻辑 - 所以我想我d把问题抛到那里,看看这确实是唯一的解决方案。

我们希望在自定义成员资格提供程序之上使用formsAuthentication,但是希望为不同的文件夹使用不同的提供程序。我们的网站使用子文件夹(例如:〜/ 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中的不同Web应用程序)。这是正确的,还是我错过了什么?或者还有其他我不知道的替代方案吗?

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

首先,如果您可以控制数据库,我认为基于角色的安全性对您的应用程序非常有意义。但如果你不能改变它,那就不行了。

替代解决方案可以是网关登录表单,它根据ReturnUrl querystring变量将用户重定向到特定于文件夹的登录表单,该表单将使用它想要验证用户的提供程序。然后,它使用FormsAuthentication.RedirectFromLoginPage设置身份验证Cookie并重定向到上一页。您可以设置角色并使用基于角色的安全性来控制<authorization>web.config标记对每个文件夹的访问。

答案 1 :(得分:0)

我不确定您要做什么,但对于每种客户类型的角色怎么样?限制每个子文件夹的角色访问权限,但您仍有1个成员资格提供者和1个角色提供者。