asp net mvc 5中的授权帮助
Posted
技术标签:
【中文标题】asp net mvc 5中的授权帮助【英文标题】:Authorization help in asp net mvc 5 【发布时间】:2015-08-02 00:54:57 【问题描述】:我很难理解如何向我的应用程序添加某种授权。这就是我的登录控制器现在的样子:
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]
装饰你的其他安全操作方法吗?
[Authorize]
在控制器上。
【参考方案1】:
如果您将Authorize 属性放在所有其他控制器上,如果用户未通过身份验证,他们将无法访问这些控制器中的任何方法。
public class LoginController
[Authorize]
public class HomeController
在这种情况下,您的所有LoginController
方法看起来都应该允许匿名访问,您应该这样装饰它们。此外,将AuthenticateUser
设为私有可能是一种很好的安全措施。
【讨论】:
我尝试添加它,现在“主页”没有显示任何内容,我需要添加什么东西才能使 Authorize 标签生效吗? @jiggergargle 检查 http 响应。状态码是 401 吗?如果是这样,则表明它正在运行并且您未通过身份验证。【参考方案2】:使用[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>
【讨论】:
以上是关于asp net mvc 5中的授权帮助的主要内容,如果未能解决你的问题,请参考以下文章
EF Core 中的 ASP.NET Core 5 MVC 和 Identity - 基于资源的授权
ASP.NET MVC 5 中的简单角色管理器和授权,无需使用 Identity(CustomRoleProvider)