public ReturnKey Post([FromBody] Signin signin) { var rtnKey = new ReturnKey(); if (signin?.UserName != null && signin.Password != null) { var salt = (from i in _db.TbSubscriptions where string.Equals(i.Email, signin.UserName, StringComparison.CurrentCultureIgnoreCase) select i.Salt).FirstOrDefault(); var subscription = (from i in _db.TbSubscriptions where i.SubscriptionStatusId == 2 && i.Email == signin.UserName && i.Password == Security.EncryptPassword(signin.Password, salt) select i).FirstOrDefault(); if (subscription != null) { var token = (from i in _db.TbSubscriptionTokens where i.Email == subscription.Email && i.ExpiresOn > DateTime.Now select i).FirstOrDefault(); if (token == null) { double.TryParse(_configuration["Setting:AuthTokenExpiry"], out var authTokenExpiry); token = new TbSubscriptionTokens { Email = subscription.Email, AuthToken = Guid.NewGuid().ToString(), IssuedOn = DateTime.Now, ExpiresOn = DateTime.Now.AddSeconds(authTokenExpiry) }; _db.TbSubscriptionTokens.Add(token); _db.SaveChanges(); } rtnKey.UID = subscription.UniqueId.ToString(); rtnKey.AuthToken = token.AuthToken; rtnKey.Message = "success!!!"; rtnKey.Role = subscription.GroupId; } else { rtnKey.Message = _localizer["NotValid"]; } } else { rtnKey.Message = _localizer["NotValid"]; } return(rtnKey); }
public User Authenticate(string username, string password) { if (username == null || password == null) { return(null); } var salt = (from i in _db.TbSubscriptions where string.Equals(i.Email, username, StringComparison.OrdinalIgnoreCase) select i.Salt).FirstOrDefault(); if (salt == null) { return(null); } var subscription = (from i in _db.TbSubscriptions where i.SubscriptionStatusId == (int)UserStatus.SubscriptionStatusActive && i.Email == username && i.Password == Security.EncryptPassword(password, salt) select i).FirstOrDefault(); if (subscription == null) { return(null); } var token = (from i in _db.TbSubscriptionTokens where i.Email == subscription.Email && i.ExpiresOn > DateTime.Now select i).FirstOrDefault(); if (token != null) { return new User { UniqueId = subscription.UniqueId, FirstName = subscription.FirstName, LastName = subscription.LastName, Username = subscription.Email, Role = subscription.GroupId, Token = token.AuthToken } } ; // Generate JWT Token double.TryParse(_configuration["Settings:AuthTokenExpiry"], out var authTokenExpiry); var tokenHandler = new JwtSecurityTokenHandler(); var key = Encoding.ASCII.GetBytes(_configuration["Settings:Secret"]); var tokenDescriptor = new SecurityTokenDescriptor { Subject = new ClaimsIdentity(new Claim[] { new Claim(ClaimTypes.Name, subscription.UniqueId.ToString()) }), Expires = DateTime.UtcNow.AddSeconds(authTokenExpiry), SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha256Signature) }; var jwtToken = tokenHandler.CreateToken(tokenDescriptor); // Add Token in Database var tbSubscriptionTokens = new TbSubscriptionTokens { AuthToken = tokenHandler.WriteToken(jwtToken), Email = subscription.Email, Id = subscription.UniqueId.ToString(), IssuedOn = DateTime.Now, ExpiresOn = DateTime.Now.AddSeconds(authTokenExpiry) }; _db.TbSubscriptionTokens.Add(tbSubscriptionTokens); _db.SaveChanges(); token = new TbSubscriptionTokens() { AuthToken = tbSubscriptionTokens.AuthToken }; return(new User { UniqueId = subscription.UniqueId, FirstName = subscription.FirstName, LastName = subscription.LastName, Username = subscription.Email, Role = subscription.GroupId, Token = token.AuthToken }); } }