/// <summary> /// Authenticate method /// </summary> /// <param name="model">model</param> /// <returns>AuthenticateResponseViewModel</returns> public async Task <AuthenticateResponseViewModel> Authenticate(AuthenticateRequestViewModel model) { User userResponse = await _userRepositoryService.Authenticate(model.Username.ToLower(), model.Password); UserViewModel mappedUser = _mapper.Map <UserViewModel>(userResponse); // return null if user not found if (mappedUser == null) { return(null); } AuthenticateResponseViewModel authenticateResponse = new AuthenticateResponseViewModel(mappedUser, string.Empty); // authentication successful so generate jwt token string token = GenerateJwtToken(authenticateResponse); return(new AuthenticateResponseViewModel(mappedUser, token)); }
public async Task <IActionResult> Authenticate([FromBody] AuthenticateRequestViewModel model) { if (model == null) { throw new ArgumentNullException("model"); } if (ModelState.IsValid) { AuthenticateResponseViewModel response = await _mappedUserRepositoryService.Authenticate(model); if (response == null) { return(BadRequest(new { message = "Username or password is incorrect" })); } return(Ok(response)); } return(BadRequest(new { message = "Username or password is incorrect" })); }
/// <summary> /// GenerateJwtToken method /// </summary> /// <param name="user">user</param> /// <returns>string</returns> private string GenerateJwtToken(AuthenticateResponseViewModel user) { // generate token that is valid for 7 days var tokenHandler = new JwtSecurityTokenHandler(); var claims = new[] { new Claim(JwtRegisteredClaimNames.Sub, _jwtSettings.Subject), new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()), new Claim(JwtRegisteredClaimNames.Iat, DateTime.UtcNow.ToString()), new Claim("UserId", user.UserId.ToString()), new Claim("FirstName", user.FirstName), new Claim("LastName", user.LastName), new Claim("UserName", user.UserName), new Claim("Email", user.Email) }; var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_jwtSettings.Key)); var signIn = new SigningCredentials(key, SecurityAlgorithms.HmacSha256Signature); var token = new JwtSecurityToken(_jwtSettings.Issuer, _jwtSettings.Audience, claims, expires: DateTime.UtcNow.AddDays(1), signingCredentials: signIn); return(tokenHandler.WriteToken(token)); }