public IActionResult Refresh() { // check for access token if (!Request.Headers.ContainsKey("AccessToken")) { ErrorMessage error = new ErrorMessage("Failed to refresh access", "User does not have the access token."); return(new BadRequestObjectResult(error)); } // check for refresh token if (!Request.Headers.ContainsKey("RefreshToken")) { ErrorMessage error = new ErrorMessage("Failed to refresh access", "User does not have the refresh token."); return(new BadRequestObjectResult(error)); } // attempt getting user from claims User user = HelperMethods.GetUserFromAccessToken(Request.Headers["AccessToken"].ToString(), _context, _configuration.GetValue <string>("UserJwtTokenKey"), _configuration.GetValue <string>("ApiUrl")); // make sure this is a valid token for the user if (!HelperMethods.ValidateRefreshToken(user, Request.Headers["RefreshToken"].ToString(), _keyAndIV)) { ErrorMessage error = new ErrorMessage("Invalid refresh token", "Refrsh token could not be validated."); return(new BadRequestObjectResult(error)); } string newTokenStr = HelperMethods.GenerateJWTAccessToken(user.ID, _configuration.GetValue <string>("UserJwtTokenKey"), _configuration.GetValue <string>("ApiUrl")); RefreshToken newRefToken = HelperMethods.GenerateRefreshToken(user, _context, _keyAndIV); LoginResponse rtrn = new LoginResponse { ID = user.ID, AccessToken = newTokenStr, RefreshToken = new ReturnableRefreshToken(newRefToken, _keyAndIV) }; return(new OkObjectResult(rtrn)); }
public IActionResult Refresh() { try { // attempt getting user from claims User user = HelperMethods.GetUserFromAccessToken(Request.Cookies["AccessTokenSameSite"] ?? Request.Cookies["AccessToken"], _context, _configuration.GetValue <string>("UserJwtTokenKey")); // make sure this is a valid token for the user if (!HelperMethods.ValidateRefreshToken(user, Request.Cookies["RefreshTokenSameSite"] ?? Request.Cookies["RefreshToken"])) { throw new SecurityTokenException("Invalid refresh token!"); } string newTokenStr = HelperMethods.GenerateJWTAccessToken(user.Role, user.Email, _configuration.GetValue <string>("UserJwtTokenKey")); RefreshToken newRefToken = HelperMethods.GenerateRefreshToken(user, _context); LoginResponse rtrn = new LoginResponse { ID = user.ID, AccessToken = newTokenStr, RefreshToken = new ReturnableRefreshToken(newRefToken) }; // append cookies after refresh HelperMethods.SetCookies(Response, newTokenStr, newRefToken); return(new OkObjectResult(rtrn)); } catch (Exception ex) { ErrorMessage error = new ErrorMessage("Error refreshing access.", ex.Message); return(new InternalServerErrorResult(error)); } }
public IActionResult Refresh() { // attempt getting user from claims User user = HelperMethods.GetUserFromAccessToken(Request.Cookies["AccessTokenSameSite"] ?? Request.Cookies["AccessToken"], _context, _configuration.GetValue <string>("UserJwtTokenKey")); // make sure this is a valid token for the user if (!HelperMethods.ValidateRefreshToken(user, Request.Cookies["RefreshTokenSameSite"] ?? Request.Cookies["RefreshToken"])) { ErrorMessage error = new ErrorMessage("Invalid refresh token", "Refrsh token could not be validated."); return(new BadRequestObjectResult(error)); } string newTokenStr = HelperMethods.GenerateJWTAccessToken(user.ID, _configuration.GetValue <string>("UserJwtTokenKey")); RefreshToken newRefToken = HelperMethods.GenerateRefreshToken(user, _context); LoginResponse rtrn = new LoginResponse { ID = user.ID, AccessToken = newTokenStr, RefreshToken = new ReturnableRefreshToken(newRefToken) }; // append cookies after refresh HelperMethods.SetCookies(Response, newTokenStr, newRefToken); return(new OkObjectResult(rtrn)); }