使用现有数据库的身份和角色提供程序登录系统

问题描述 投票:0回答:1

[在过去的几天中,我一直在为webApp(asp.Net MVC 5)创建一个登录系统,其中已经有一个包含用户名,凭据和角色的数据库。我从许多博客中找到了信息,并为我的工作提出了堆栈溢出问题,并相应地使用了它。现在,在上线之前,我要确保此登录系统是安全的。我也想知道是否可以为此目的实现一些改进。

对于身份验证,我已经实现了以下文章https://www.jamessturtevant.com/posts/ASPNET-Identity-Custom-Database-and-OWIN/中所示的方法。对于授权,我使用了角色提供程序并实现了一些必需的方法,如下所示:

public class RoleList:RoleProvider
{
     public override bool IsUserInRole(string username, string roleName)
     {
            if (username == null || username == "")
                throw new ProviderException("User name cannot be empty or null.");
            if (roleName == null || roleName == "")
                throw new ProviderException("Role name cannot be empty or null.");

            bool userIsInRole = false;
            List<string> data = new List<string>();
            String mycon = ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString; 
            String myquery = 
                "SELECT " +
                    "r.RName, u.UName " +
                "FROM " +
                    "Users u " +
                "INNER JOIN " +
                    "UserRole ur " +
                "ON " +
                    "u.Id=ur.UserId " +
                "INNER JOIN " +
                    "Roles r " +
                "ON " +
                    "ur.RoleId=r.Id " +
                "WHERE " +
                    "u.UName=@UName " +
                "AND " +
                    "r.Name=@RName";
            var paramList = new List<SqlParameter>();
            paramList.Add(new SqlParameter("@UName", username));
            paramList.Add(new SqlParameter("@RName", roleName));
            using (var reader = HelperClasses.DatabaseUtil.GetReader(myquery, mycon, paramList))
            {
                if (reader.HasRows)
                {
                    userIsInRole = true;
                }
            }

            return userIsInRole;
        }
}

在数据库中在数据库中,我有4个表,分别存储以下信息。

  1. 用户(名称和ID)和哈希密码(使用Bcrypt)。
  2. 角色。
  3. 用户和角色映射。
  4. 具有用户ID的盐

在登录控制器中

登录:

  1. 使用输入的用户名从数据库中获取盐和哈希。
  2. 在输入的纯文本密码中加盐。
  3. 通过向Bcrypt输入哈希和加盐密码来验证密码。
  4. 如果成功,将通过自定义登录管理器对用户进行身份验证,如下所示
CustomSignInManager.SignIn(user, isPersistent: false, rememberBrowser: false);

注销:

public ActionResult LogOff()
{ 
   HttpContext.GetOwinContext().Authentication.SignOut    
                             (DefaultAuthenticationTypes.ApplicationCookie);     
   return RedirectToAction("Index","Login");
}

[授权动作

[Authorize(Roles = "Customer")]
public ActionResult Index()
{
   return View();
}

因为,它是应用程序中的一个重要部分,我希望了解它的优缺点。我尽可能简化了问题,以使读者易于理解。这是ASP.NET MVC 5中登录系统的正确方法吗?我可以做得更好吗?

asp.net asp.net-mvc asp.net-identity
1个回答
1
投票
密码应

不是

© www.soinside.com 2019 - 2024. All rights reserved.