public async Task <AuthenticationResultModel> AuthenticateAsync(UsersMaster user) { // authentication successful so generate jwt token AuthenticationResultModel authenticationResult = new AuthenticationResultModel(); var tokenHandler = new JwtSecurityTokenHandler(); try { var key = Encoding.ASCII.GetBytes(_appSettings.JwtSettings.Secret); ClaimsIdentity Subject = new ClaimsIdentity(new Claim[] { new Claim("UserId", user.UserId.ToString()), new Claim("FirstName", user.FirstName), new Claim("LastName", user.LastName), new Claim("EmailId", user.Email == null?"":user.Email), new Claim("UserName", user.UserName == null?"":user.UserName), new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()), }); foreach (var item in GetUserRole(user.UserId)) { Subject.AddClaim(new Claim(ClaimTypes.Role, item.RoleName)); } var tokenDescriptor = new SecurityTokenDescriptor { Subject = Subject, Expires = DateTime.UtcNow.Add(_appSettings.JwtSettings.TokenLifetime), SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha256Signature) }; var token = tokenHandler.CreateToken(tokenDescriptor); authenticationResult.Token = tokenHandler.WriteToken(token); var refreshToken = new RefreshToken { Token = Guid.NewGuid().ToString(), JwtId = token.Id, UserId = user.UserId, CreationDate = DateTime.UtcNow, ExpiryDate = DateTime.UtcNow.AddMonths(6) }; await _context.RefreshTokens.AddAsync(refreshToken); await _context.SaveChangesAsync(); authenticationResult.RefreshToken = refreshToken.Token; authenticationResult.Success = true; return(authenticationResult); } catch (Exception ex) { return(null); } }
public async Task <ResponseModel <TokenModel> > LoginAsync(LoginModel login) { ResponseModel <TokenModel> response = new ResponseModel <TokenModel>(); try { UsersMaster loginUser = _context.UsersMasters.FirstOrDefault(c => c.UserName == login.UserName && c.Password == login.Password); if (loginUser == null) { response.IsSuccess = false; response.Message = "Invalid Username And Password"; return(response); } AuthenticationResultModel authenticationResult = await AuthenticateAsync(loginUser); if (authenticationResult != null && authenticationResult.Success) { response.Data = new TokenModel() { Token = authenticationResult.Token, RefreshToken = authenticationResult.RefreshToken }; } else { response.Message = "Something went wrong!"; response.IsSuccess = false; } return(response); } catch (Exception ex) { throw ex; } }