private async Task <ApplicationUser> HandleRefreshToken(LoginModelRequest loginModel, ResultResponseObject <TokenResponse> resultResponseModel) { bool credenciaisValidas = false; if (String.IsNullOrEmpty(loginModel.RefreshToken)) { RefreshTokenData refreshTokenBase = null; string strTokenArmazenado = _cache.GetString(loginModel.RefreshToken); if (!String.IsNullOrWhiteSpace(strTokenArmazenado)) { refreshTokenBase = JsonConvert .DeserializeObject <RefreshTokenData>(strTokenArmazenado); } credenciaisValidas = (refreshTokenBase != null && loginModel.RefreshToken == refreshTokenBase.RefreshToken); // Elimina o token de refresh já que um novo será gerado if (credenciaisValidas) { _cache.Remove(loginModel.RefreshToken); } } JwtSecurityToken token = null; if (!string.IsNullOrWhiteSpace(loginModel.RefreshToken)) { token = new JwtSecurityTokenHandler().ReadJwtToken(loginModel.RefreshToken); } if (token == null) { resultResponseModel.AddError("Refresh Token", "Não foi possível ler o refresh token"); } else if (token.ValidTo < DateTime.Now) { resultResponseModel.AddError("Refresh Token", "Refresh token inválido"); } else { string userId = token.Claims.First(claim => claim.Type == JwtRegisteredClaimNames.UniqueName).Value; ApplicationUser user = await _userManager.FindByIdAsync(userId); return(user); } return(null); }
private async Task <ApplicationUser> HandleUserAuthentication(LoginModelRequest loginModel, ResultResponseObject <TokenResponse> resultResponseModel) { Microsoft.AspNetCore.Identity.SignInResult result = new Microsoft.AspNetCore.Identity.SignInResult(); ApplicationUser appUser = _userManager.Users.SingleOrDefault(r => r.UserName == loginModel.Login); if (appUser != null) { result = await _signInManager.PasswordSignInAsync(loginModel.Login, loginModel.Password, false, false); if (!result.Succeeded) { resultResponseModel.AddError("Login", "Usuário ou senha inválida"); appUser = null; } } else { resultResponseModel.AddError("Login", "Usuário não encontrado"); } return(appUser); }