我很难理解如何为我的应用程序添加某种授权。这就是我的登录控制器现在的样子:
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。
感谢您的时间。
答案 0 :(得分:1)
如果将Authorize属性放在所有其他控制器上,则用户将无法访问这些控制器中的任何方法(如果未经过身份验证)。
public class LoginController
{
}
[Authorize]
public class HomeController
{
}
在这种情况下,您的所有LoginController
方法看起来应该允许匿名访问,您应该这样装饰它们。此外,将AuthenticateUser
私有化可能是一个很好的安全措施。
答案 1 :(得分:1)
使用[Authorize]
修改要保护的操作方法可行。您甚至可以在控制器级别添加此选项,并有选择地[AllowAnonymous]
执行特定操作。
如果需要保护大多数操作方法,注册GlobalFilter
以便默认情况下所有操作都被视为[Authorize]
,这非常有用。通过这种方式,您不太可能错过一个并且无意中允许匿名访问应该是安全的路由。
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new AuthorizeAttribute());
}
如果您正在使用FormsAuthentication,则可以在web.config中设置默认重定向,以便对没有有效会话的安全操作方法进行任何调用。
<authentication mode="Forms">
<forms name=".ASPXAUTH" loginUrl="/login" protection="All" path="/" timeout="60" />
</authentication>