C# ASP.NET MVC4-限制未登录用户的所有页面
我正在使用ASP.NETMVC4构建一个简单的intranet web应用程序。我已经建立了一个登录系统,并将RouteConfig.cs配置为将登录视图显示为“主页” 我的问题很简单:如果“访问者”没有登录,他们就无法访问其他视图。为了执行测试,我尝试通过url直接访问这些页面,它可以正常工作。如何通过阻止对所有页面(登录页面除外)的访问来确保安全 我读过一些关于Web.config和授权的文章,但没有任何效果。有人帮忙吗 编辑:正如Khanh TO所说,使用AutorizeAttribute是最好的方法。然而,我仍然有一个小问题。当我以简单用户的身份登录时,我应该无法看到管理页面(事实就是这样),但当我尝试这样做时,它会将我重定向到登录页面(我已经登录了!)。我认为这是因为下面的代码。问题是,如果用户试图尝试未经授权的页面,我想重定向到主页。有可能吗 以下是我所说的代码:C# ASP.NET MVC4-限制未登录用户的所有页面,c#,asp.net-mvc,security,authentication,C#,Asp.net Mvc,Security,Authentication,我正在使用ASP.NETMVC4构建一个简单的intranet web应用程序。我已经建立了一个登录系统,并将RouteConfig.cs配置为将登录视图显示为“主页” 我的问题很简单:如果“访问者”没有登录,他们就无法访问其他视图。为了执行测试,我尝试通过url直接访问这些页面,它可以正常工作。如何通过阻止对所有页面(登录页面除外)的访问来确保安全 我读过一些关于Web.config和授权的文章,但没有任何效果。有人帮忙吗 编辑:正如Khanh TO所说,使用AutorizeAttribute
<authentication mode="Forms">
<forms loginUrl="~/User/Login" timeout="2880" />
</authentication>
此外,我想明确指出,我的用户存储在一个简单的表中,其中的角色由bool类型定义(isAdmin以了解用户是否为管理员)。如果需要对某些页面选择性地应用授权,请使用on controller或action方法: 示例代码:
[Authorize]
public class SecuredController : Controller
{
public ActionResult Index()
{
return View();
}
}
或:
引自:
当您使用AuthorizeAttribute标记一个操作方法时,可以访问该方法
操作方法仅限于同时经过身份验证和身份验证的用户
经授权的。如果使用该属性标记控制器,则所有操作
控制器中的方法受到限制
Authorize属性允许您指示授权仅限于预定义角色或单个用户。这让你对谁拥有高度的控制权
被授权查看网站上的任何页面
如果未经授权的用户
尝试访问用Authorize属性标记的方法,
MVC框架返回401HTTP状态代码。如果网站是
配置为使用ASP.NET窗体身份验证,401状态代码
使浏览器将用户重定向到登录页面
如果需要全局应用authorize属性(登录页面除外)。您可以将authorized属性添加到全局筛选器,如下所示:
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new AuthorizeAttribute());
}
并应用于您的登录视图:
public class AccountController : Controller
{
[AllowAnonymous]
public ActionResult Login()
{
return View();
}
}
在web.config中,启用表单身份验证:
<authentication mode="Forms">
<forms loginUrl="~/Account/Login" timeout="2880" />
</authentication>
谢谢您的帮助!你能(或其他人)看看我编辑的帖子吗?我还有一个小问题。@Traffy:首先,如果我们将来有更多的角色,使用布尔值不是一个可伸缩的解决方案。要在asp.net mvc中执行角色授权,您可以查看以下讨论:@Traffy:如果需要重定向用户,使用表单身份验证是正确的解决方案。表单身份验证模块从AuthorizeAttribute截取401,并将其转换为302,以重定向用户,正如我在回答中引用的那样。
<authentication mode="Forms">
<forms loginUrl="~/Account/Login" timeout="2880" />
</authentication>