public async Task <string> GetTokenAsync(MyTypeWebClient typeClient, IHttpContextAccessor httpContextAccessor) { var sessionAuthResponse = GetSessionAuthResponse(httpContextAccessor); if (sessionAuthResponse != null) { DateTime currentUtcTime = DateTime.UtcNow; if (sessionAuthResponse.expirationDateTime < currentUtcTime) //token expired { var refreshtoken = new RequestRefreshToken { token = sessionAuthResponse.accessToken, refreshToken = sessionAuthResponse.refreshToken }; var authToken = await GetRefreshToken(typeClient, httpContextAccessor, refreshtoken); if (authToken != null) { return(authToken.accessToken); } } return(sessionAuthResponse.accessToken); } return(null); }
public async Task <IActionResult> RefreshToken(RequestRefreshToken refreshData) { var decodedToken = new JwtSecurityTokenHandler().ReadToken(refreshData.refreshToken) as JwtSecurityToken; var userId = decodedToken.Claims.First(claim => claim.Type == "id").Value; var expirationTime = Int32.Parse(decodedToken.Claims.First(claim => claim.Type == "exp").Value); var now = DateTime.UtcNow.Subtract(DateTime.MinValue.AddYears(1969)).TotalSeconds; if (expirationTime < now) { return(BadRequest(new { errorText = "Token expired" })); } User user = _userService.Get(userId); if (user == null) { return(NotFound()); } JWTAuthResponse response = _jwtHelper.refreshToken(user); return(Json(response)); }
private async Task <AuthResponse> GetRefreshToken(MyTypeWebClient typeClient, IHttpContextAccessor httpContextAccessor, RequestRefreshToken requestRefreshToken) { string jsonStringIfyData = JsonConvert.SerializeObject(requestRefreshToken); var contentType = new MediaTypeWithQualityHeaderValue("application/json"); typeClient.Client.DefaultRequestHeaders.Accept.Add(contentType); var contentData = new StringContent(jsonStringIfyData, System.Text.Encoding.UTF8, "application/json"); var response = await typeClient.Client.PostAsync("/api/v2.2/Auth/RefreshToken", contentData); if (response.StatusCode == System.Net.HttpStatusCode.OK) { var responsecontent = await response.Content.ReadAsStringAsync(); var refreshtokenresult = JsonConvert.DeserializeObject <RefreshTokenResponse>(responsecontent); if (refreshtokenresult.success) { var tokenresponse = new AuthResponse { accessToken = refreshtokenresult.token, refreshToken = refreshtokenresult.refreshToken, expirationDateTime = refreshtokenresult.accessTokenExpiration, dateIssued = refreshtokenresult.issuedDate }; var responseAuth = JsonConvert.SerializeObject(tokenresponse); httpContextAccessor.HttpContext.Session.SetString("responseAuth", responseAuth); return(tokenresponse); } } return(null); }