asp.net mvc 5中的授权帮助
本文关键字:授权 帮助 net mvc asp | 更新日期: 2023-09-27 17:49:58
我很难理解如何向我的应用程序添加某种授权。这是我的登录控制器现在的样子:
private UserProvider mUserProvider;
// GET: Login
public ActionResult Index()
{
return View();
}
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public ActionResult Login(LoginViewModel model)
{
string userName = AuthenticateUser(model.UserName, model.Password);
if (!(String.IsNullOrEmpty(userName)))
{
Session["UserName"] = userName;
return View("~/Views/Home/Default.cshtml");
}
else
{
ModelState.AddModelError("", "Bad login");
return View("~/Views/Home/Login.cshtml");
}
}
public string AuthenticateUser(string username, string password)
{
//do stuff and get the special username
return sUsername;
}
为了确保未经身份验证的用户不能查看除登录之外的任何其他页面,我需要添加什么?
ps:我100%需要使用AuthenticateUser.
感谢您的宝贵时间。
如果您在所有其他控制器上放置了Authorize属性,如果用户未经过身份验证,则无法访问这些控制器中的任何方法。
public class LoginController
{
}
[Authorize]
public class HomeController
{
}
在这种情况下,您的所有LoginController
方法看起来应该允许匿名访问,并且您应该这样装饰它们。此外,使AuthenticateUser
私有可能是一个很好的安全措施。
装饰你想用[Authorize]
保护的动作方法会起作用。您甚至可以在控制器级别添加它,并在特定操作上选择性地使用[AllowAnonymous]
。
这是有用的,如果你的大多数动作方法需要被保护,注册一个GlobalFilter
,以便所有的动作被视为默认的[Authorize]
。这样你就不太可能错过一个,并无意中允许匿名访问应该是安全的路由。
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new AuthorizeAttribute());
}
如果你正在使用FormsAuthentication,在你的web。在没有有效会话的情况下,您可以为任何对安全操作方法的调用设置默认重定向。
<authentication mode="Forms">
<forms name=".ASPXAUTH" loginUrl="/login" protection="All" path="/" timeout="60" />
</authentication>