我已经创建了一个ASP.NET MVC核心应用程序。我刚完成创建和登录用户。现在,我试图弄清楚
1.如何保存用户登录信息
2.如何要求用户登录才能访问网站的其余部分。
用于保存用户日志信息。我打算使用Identity或Asp.Net.Session,但是看到有什么我无法找到显示如何要求用户登录才能访问路线的信息,我不确定哪个选项最合适。
有人可以向我解释在访问路由之前如何要求身份验证,哪种保存登录信息最适合该方法?
当前登录示例
public ActionResult Login(LoginModel model){
if (ModelState.IsValid){
SqlConnect test = new SqlConnect("Data Source=/home/andrew/database.db","Accounts");
var check = test.count(model.UserName,model.Password);
if(check){
// Found in database
return RedirectToAction("Index","Home");
}
}
// If we got this far, something failed, redisplay form
return RedirectToAction("Error","Home");
}
您不应该确保路线安全。使用占位符时(例如在默认路由中),可能有多个路由可以到达一种操作方法。当您的应用程序随时间变化时,这些备用路径肯定很难(几乎不可能)保持安全。
因此,最好的选择是通过防止资源被提供来保护资源。请注意,这也是安全性在ASP.NET中的工作方式,因此ASP.NET和MVC都挂接到相同的机制(IPrincipal
和IIdentity
)中,以同时控制身份验证和授权。Microsoft的ASP.NET Identity和较旧的安全框架都使用此扩展点插入MVC和ASP.NET。
在MVC中,正是AuthorizeAttribute
使用这些接口来保护操作方法的安全。AuthorizeAttribute
可以以多种方式使用:
public class MyController
{
[Authorize(Roles = "Admin,SuperUser")]
public ActionResult Index()
{
return View();
{
}
[Authorize(Roles = "Admin,SuperUser")]
public class MyController
{
[AllowAnonymous] // All users have access
public ActionResult Index()
{
return View();
{
// Only authenticated users in Admin or SuperUser
// role have access
public ActionResult Contact()
{
return View();
{
// Only authenticated users in Admin or SuperUser
// role have access
public ActionResult About()
{
return View();
{
}
public class FilterConfig
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new AuthorizeAttribute());
filters.Add(new HandleErrorAttribute());
}
}
这意味着只有经过身份验证的用户才能访问应用程序中的任何操作方法。您也可以在此处使用角色filters.Add(new AuthorizeAttribute() { Roles = "Foo,Bar" });
。而且,您可以使用允许特定的控制器/操作访问未经身份验证的用户AllowAnonymousAttribute
。
如果您拥有比用户和角色更复杂的业务逻辑,则也可以子类化AuthorizeAttribute
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句