public async Task <UserTicketViewModel> RefreshAsync(RefreshTicketViewModel credentials) { _entityValidator.Value.ValidateAndThrow(credentials); var principal = GetPrincipalFromExpiredToken(credentials.AccessToken); var user = await _userManager.Value.FindByEmailAsync(principal.Claims.FirstOrDefault().Value); if (user == null) { throw new SecurityTokenException("Invalid Token"); } if (user.RefreshToken != credentials.RefreshToken || user.RefreshTokenExpiryDate < DateTime.UtcNow) { throw new SecurityTokenException("Invalid refresh token"); } var newJwtToken = GenerateAccessToken(principal.Claims); var newRefreshToken = GenerateRefreshToken(); user.RefreshToken = newRefreshToken; user.RefreshTokenExpiryDate = DateTime.UtcNow.AddDays(int.Parse(_configurations.Value["Tokens:RefreshTokenDurationInDays"])); await _userManager.Value.UpdateAsync(user); return(new UserTicketViewModel { AccessToken = newJwtToken, RefreshToken = newRefreshToken }); }
public async Task <UserTicketViewModel> Refresh([FromBody] RefreshTicketViewModel model) { return(await _userService.Value.RefreshAsync(model)); }