我在ASP.NET MVC Web应用程序中启用了表单身份验证。我想允许匿名用户只访问某些特定页面,例如Register.cshtml。通过这样做,我能够允许从我的根web.config访问我的CSS文件。
<location path="Content/Site.css">
<system.web>
<authorization>
<allow users="*"/>
</authorization>
</system.web>
</location>
现在我想允许匿名访问其他页面,例如Home和Register。有人知道如何实现这个目标吗?
答案 0 :(得分:48)
在MVC中,您通常使用[Authorize]
属性来管理授权。使用该属性打包的控制器或单个操作将要求授权用户才能访问它们 - 匿名用户可以使用所有其他操作。
换句话说,黑名单方法,其中需要授权的操作被匿名用户使用[Authorize]
列入黑名单 - 所有操作(未使用属性打扮)都可用。
<强>更新强>
使用MVC4引入了一个新属性,即[AllowAnonymous]
属性。与[Authorize]
属性一起,您现在可以采用白名单方法。白名单方法是通过使用[Authorize]
属性修整整个控制器来完成的,以强制授权该控制器内的所有操作。然后,您可以使用[AllowAnonymous]
属性修改不需要授权的特定操作,从而仅列出那些操作的白名单。通过这种方法,您可以确信不会偶然忘记使用[Authorize]
进行动作,让任何人都可以使用,即使它不应该。
您的代码可能是这样的:
[Authorize]
public class UserController : Controller {
[AllowAnonymous]
public ActionResult LogIn () {
// This action can be accessed by unauthorized users
}
public ActionResult UserDetails () {
// This action can NOT be accessed by unauthorized users
}
}
答案 1 :(得分:5)
在Web.config中,我有以下授权
<authorization>
<deny users ="?"/>
</authorization>
这会导致
[AllowAnonymous]
无法正常工作,我必须删除我的Web.config的授权,并在所有控制器中放行
[Authorize]
在宣布课程之前,要正常工作。