我正在使用ASP.NET MVC 5和Entity Framework 6构建一个简单的CMS。我有2个站点:Public和Admin。公共网站,以显示所有内容和管理网站,以管理所有内容。
我只需要一个管理员帐户来处理管理站点中的所有内容。 我正在考虑使用会话来保存登录的用户数据,并在访问授权页面时检查会话详细信息。
将用户数据保存在会话中。
var obj = db.UserProfiles.Where(a => a.UserName.Equals(objUser.UserName) && a.Password.Equals(objUser.Password)).FirstOrDefault();
if (obj != null)
{
Session["UserID"] = obj.UserId.ToString();
Session["UserName"] = obj.UserName.ToString();
return RedirectToAction("UserDashBoard");
}
在访问授权页面之前进行检查。
public ActionResult UserDashBoard()
{
if (Session["UserID"] != null)
{
return View();
} else
{
return RedirectToAction("Login");
}
}
因此,使用这种方法,我不需要为授权实现高级ASP身份功能。
这种方法是否正确,使用这种方法会有任何缺点吗?
答案 0 :(得分:3)
永远不会经常使用会话进行身份验证。它对于初学者来说是不安全的,并且它会在失去会话时幸免于难(IIS可以随时以任何理由杀死它)。会话cookie未加密,因此可以轻松抓取和使用它们(假设使用非加密链接,即使您使用HTTPS进行身份验证页面)。
另一个问题是您在管道中进行身份验证的方式太晚了。 OnAuthenticate在管道的最开始运行,而您的操作方法即将结束。这意味着如果用户未获得授权,该网站正在做很多工作,而这并不需要做。
我不确定你为什么这么反对使用Identity,MVC基本模板已经为你推出了一个完整的身份实现。你不必做太多。
答案 1 :(得分:1)
缺点是你必须自己编写所有内容。您已经需要基于角色的授权,并且必须编写cludges。身份已经实现并为您测试。同时保持会话中的信息不是很安全。
无论如何,你不需要自己实施太多。是的,有很多功能你可能不会需要,但只是不能使用它。
不要建立自己的授权系统。既然你问这个问题,你可能没有足够的资格来保证它的安全。