自定义表单身份验证+ MVC3 + AuthorizeAttribute

时间:2011-12-19 22:25:34

标签: asp.net-mvc-3 forms-authentication

我基本上做的是this。但是,每当我使用内置的AuthorizeAttribute时,MVC框架(我猜)都不会查看我的主体以确定用户是否具有适当的角色。它一直试图在app_data目录中创建一个新的MDF文件,因为它没有特权,所以它会爆炸。

这是预期的行为吗?我应该派生自己的AuthorizeAttribute并自己查看校长吗?

另一个奇怪的行为是,我在同一个域上有两个站点,我正在进行单点登录。在任一站点上,我使用相同的类库在AuthenticateRequest上重新创建我的自定义主体,并且我在调试时看到主体在每个站点上正确设置。但是,站点1(对用户进行身份验证的站点)使用内置的AuthorizeAttribute,它可以正常工作,但站点2正在尝试在调用具有AuthorizeAttribute的任何操作时创建MDF文件。

2 个答案:

答案 0 :(得分:12)

好的,我想通了,我不得不将它添加到system.webServer下的web配置中。这将删除替换我的主体的HttpModule。

<modules runAllManagedModulesForAllRequests="true">
    <remove name="RoleManager" />
</modules>

答案 1 :(得分:2)

默认情况下,新的MVC3应用程序使用SqlMembershipProvider作为默认授权机制,并尝试将详细信息存储在SQL Express数据库(MDF文件)中。

所以尝试在web.config中清除它:

<membership>
   <providers>
      <clear />
   </providers>
</membership>

只要您正确实施所有安全对象(IPrincipalIIdentity),并在Application_AuthenticateRequest上解密表单身份验证票证,内置[Authorize(Roles="RoleName")]应该适合你。

在你发布的那个链接中,我们正在做的事情很重要,而且效果很好。