public async Task RefreshTokensAsync() { var oldTokens = await this.botState.UserTokensAccessor.GetAsync(this.turnContextResolver.TurnContext); string uri = "auth/refresh"; RefreshTokensModel model = new RefreshTokensModel() { RedirectUri = this.authAppConfigs.RedirectUri, RefreshToken = oldTokens.RefreshToken, }; var newTokens = await this.PostAsync <TokensModel>(model, uri, isAuthenticated : false); await this.botState.UpdateTokensAsync(this.turnContextResolver.TurnContext, newTokens); }
public async Task <UserDTO> RefreshAccessToken(RefreshTokensModel refreshTokensModel) { var principal = Principal.GetPrincipalFromExpiredToken(refreshTokensModel.AccessToken, _sensitiveTokens); var email = principal.Identity.Name; var user = await _unitOfWork.UserRepository.GetByEmail(email); if (user.RefreshToken != null) { var savedRefreshToken = user.RefreshToken; if (savedRefreshToken != refreshTokensModel.RefreshToken) { throw new SecurityTokenException("Invalid refresh token"); } else { user.Token = AccessToken.GenerateToken(user, _sensitiveTokens); var currentTime = DateTime.ParseExact(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), "yyyy-MM-dd HH:mm:ss", System.Globalization.CultureInfo.InvariantCulture); if (currentTime > user.RefreshTokenExiparionDate) { user.RefreshToken = RefreshToken.GenerateToken(); user.RefreshTokenExiparionDate = DateTime.Now.Date.AddDays(_sensitiveTokens.RefreshTokenLifetime); } await _unitOfWork.UserRepository.Update(user); _unitOfWork.SaveChanges(); var userDTO = _mapper.Map <UserDTO>(user); return(userDTO); } } else { throw new SecurityTokenException("No refresh token id db"); } }
public async Task <IActionResult> RefreshToken([FromBody] RefreshTokensModel tokens) { var user = await _userService.RefreshAccessToken(tokens); return(Ok(user)); }