在不使用ASP.NET标识的情况下在ASP.NET中实现简单授权功能

时间:2017-05-01 03:15:55

标签: asp.net asp.net-mvc session authorization asp.net-identity

我正在使用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身份功能。

这种方法是否正确,使用这种方法会有任何缺点吗?

2 个答案:

答案 0 :(得分:3)

永远不会经常使用会话进行身份验证。它对于初学者来说是不安全的,并且它会在失去会话时幸免于难(IIS可以随时以任何理由杀死它)。会话cookie未加密,因此可以轻松抓取和使用它们(假设使用非加密链接,即使您使用HTTPS进行身份验证页面)。

另一个问题是您在管道中进行身份验证的方式太晚了。 OnAuthenticate在管道的最开始运行,而您的操作方法即将结束。这意味着如果用户未获得授权,该网站正在做很多工作,而这并不需要做。

我不确定你为什么这么反对使用Identity,MVC基本模板已经为你推出了一个完整的身份实现。你不必做太多。

答案 1 :(得分:1)

缺点是你必须自己编写所有内容。您已经需要基于角色的授权,并且必须编写cludges。身份已经实现并为您测试。同时保持会话中的信息不是很安全。

无论如何,你不需要自己实施太多。是的,有很多功能你可能不会需要,但只是不能使用它。

不要建立自己的授权系统。既然你问这个问题,你可能没有足够的资格来保证它的安全。