我基本上做的是this。但是,每当我使用内置的AuthorizeAttribute时,MVC框架(我猜)都不会查看我的主体以确定用户是否具有适当的角色。它一直试图在app_data目录中创建一个新的MDF文件,因为它没有特权,所以它会爆炸。
这是预期的行为吗?我应该派生自己的AuthorizeAttribute并自己查看校长吗?
另一个奇怪的行为是,我在同一个域上有两个站点,我正在进行单点登录。在任一站点上,我使用相同的类库在AuthenticateRequest上重新创建我的自定义主体,并且我在调试时看到主体在每个站点上正确设置。但是,站点1(对用户进行身份验证的站点)使用内置的AuthorizeAttribute,它可以正常工作,但站点2正在尝试在调用具有AuthorizeAttribute的任何操作时创建MDF文件。
答案 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>
只要您正确实施所有安全对象(IPrincipal
,IIdentity
),并在Application_AuthenticateRequest
上解密表单身份验证票证,内置[Authorize(Roles="RoleName")]
应该适合你。
在你发布的那个链接中,我们正在做的事情很重要,而且效果很好。