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.

感谢您的宝贵时间。

asp.net mvc 5中的授权帮助

如果您在所有其他控制器上放置了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>