我们正在尝试在我们的网站上实现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应用程序)。这是正确的,还是我错过了什么?或者还有其他我不知道的替代方案吗?
感谢您的帮助!
答案 0 :(得分:1)
首先,如果您可以控制数据库,我认为基于角色的安全性对您的应用程序非常有意义。但如果你不能改变它,那就不行了。
替代解决方案可以是网关登录表单,它根据ReturnUrl
querystring变量将用户重定向到特定于文件夹的登录表单,该表单将使用它想要验证用户的提供程序。然后,它使用FormsAuthentication.RedirectFromLoginPage
设置身份验证Cookie并重定向到上一页。您可以设置角色并使用基于角色的安全性来控制<authorization>
中web.config
标记对每个文件夹的访问。
答案 1 :(得分:0)
我不确定您要做什么,但对于每种客户类型的角色怎么样?限制每个子文件夹的角色访问权限,但您仍有1个成员资格提供者和1个角色提供者。