예제 #1
0
 public User Authenticate(string username, string password)
 {
     if (_db.Users.Any(user => user.Username.Equals(username)))
     {
         User user = _db.Users.Where(u => u.Username.Equals(username)).First();
         // Calculate hash password from data of client and compare with hash in server with salt
         var client_post_hash_password = Convert.ToBase64String(RandomSalt.SaltHashPassword(
                                                                    Encoding.ASCII.GetBytes(password),
                                                                    Convert.FromBase64String(user.Salt)));
         if (client_post_hash_password.Equals(user.Password))
         {
             // If the user was found, generate a JWT Token
             var tokenHandler    = new JwtSecurityTokenHandler();
             var key             = Encoding.ASCII.GetBytes(_appSettings.Secret);
             var tokenDescriptor = new SecurityTokenDescriptor()
             {
                 Subject = new ClaimsIdentity(new Claim[]
                 {
                     new Claim(ClaimTypes.Name, user.Id.ToString()),
                     new Claim(ClaimTypes.Role, user.Role)
                 }),
                 Expires            = DateTime.UtcNow.AddHours(12),
                 SigningCredentials = new SigningCredentials
                                          (new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha256)
             };
             var token = tokenHandler.CreateToken(tokenDescriptor);
             user.Token    = tokenHandler.WriteToken(token);
             user.Password = "";
             return(user);
         }
     }
     return(null);
 }
예제 #2
0
 public bool AdminResetPassword(string username, string password, string confirmpassword)
 {
     if (_db.Users.Any(user => user.Username.Equals(username)))
     {
         User user = _db.Users.Where(u => u.Username.Equals(username)).First();
         user.Salt     = Convert.ToBase64String(RandomSalt.GetRandomSalt(16)); // Get random salt
         user.Password = Convert.ToBase64String(RandomSalt.SaltHashPassword(
                                                    Encoding.ASCII.GetBytes(password),
                                                    Convert.FromBase64String(user.Salt)));
         _db.Users.Update(user);
         _db.SaveChanges();
         return(true);
     }
     return(false);
 }
예제 #3
0
        public User Register(string username, string password, string firstname, string lastname)
        {
            if (_db.Users.Any(user => user.Username.Equals(username)))
            {
                return(null);
            }
            User userObj = new User();

            userObj.Username  = username;                                             // Get the username
            userObj.FirstName = firstname;                                            // Get the first name
            userObj.LastName  = lastname;                                             // Get the last name
            userObj.Salt      = Convert.ToBase64String(RandomSalt.GetRandomSalt(16)); // Get random salt
            userObj.Password  = Convert.ToBase64String(RandomSalt.SaltHashPassword(
                                                           Encoding.ASCII.GetBytes(password),
                                                           Convert.FromBase64String(userObj.Salt)));
            userObj.Role = "Locked";
            _db.Users.Add(userObj);
            _db.SaveChanges();
            userObj.Password = "";
            return(userObj);
        }
예제 #4
0
 public bool ResetPassword(string username, string password, string confirmpassword, string existingpassword)
 {
     if (_db.Users.Any(user => user.Username.Equals(username)))
     {
         User user = _db.Users.Where(u => u.Username.Equals(username)).First();
         // Calculate hash password from data of client and compare with hash in server with salt
         var client_post_hash_password = Convert.ToBase64String(RandomSalt.SaltHashPassword(
                                                                    Encoding.ASCII.GetBytes(existingpassword),
                                                                    Convert.FromBase64String(user.Salt)));
         if (client_post_hash_password.Equals(user.Password))
         {
             user.Salt     = Convert.ToBase64String(RandomSalt.GetRandomSalt(16)); // Get random salt
             user.Password = Convert.ToBase64String(RandomSalt.SaltHashPassword(
                                                        Encoding.ASCII.GetBytes(password),
                                                        Convert.FromBase64String(user.Salt)));
             _db.Users.Update(user);
             _db.SaveChanges();
             return(true);
         }
         return(false);
     }
     return(false);
 }