public static ValidateTokenDTO CheckValidToken(CheckValidateTokenDTO tokenDTO) { ValidateTokenDTO validToken = new ValidateTokenDTO(); RSACryptoServiceProvider privateKey = new RSACryptoServiceProvider(); privateKey.FromXmlString(tokenDTO.PrivateKey); tokenDTO.Token = tokenDTO.Token.Replace("Bearer ", "", StringComparison.OrdinalIgnoreCase); TokenValidationParameters validationParameters = new TokenValidationParameters { ValidateIssuer = true, ValidateAudience = true, ValidIssuer = tokenDTO.Issuer, ValidAudience = tokenDTO.Audience, IssuerSigningKey = new RsaSecurityKey(privateKey), ValidateLifetime = tokenDTO.IsValidateExpiry, ClockSkew = TimeSpan.FromMinutes(0) //0 minute tolerance for the expiration date }; SecurityToken validatedToken; JwtSecurityTokenHandler handler = new JwtSecurityTokenHandler(); try { var payload = handler.ValidateToken(tokenDTO.Token, validationParameters, out validatedToken); Int32.TryParse(payload.Claims.Where(c => c.Type == "UserID").Select(c => c.Value).SingleOrDefault(), out int userId); var userName = payload.Claims.Where(c => c.Type == "UserName").Select(c => c.Value).SingleOrDefault(); validToken.UserID = userId; validToken.UserName = userName; validToken.IsValid = true; } catch (Exception e) { validToken.IsValid = false; validToken.ErrorMessage = e.Message; } try { //DeleteExpiryToken(); } catch (Exception e) { validToken.ErrorMessage = "Unable to delete expiry access tokens " + e.Message; } return(validToken); }
public RefreshTokenResponse RefreshToken(RefreshTokenRequest _request, string token) { RefreshTokenResponse response = new RefreshTokenResponse(); CheckValidateTokenDTO validateDto = new CheckValidateTokenDTO { Audience = configuration["Audience"], Issuer = configuration["Issuer"], PrivateKey = configuration["PrivateKey"], IsValidateExpiry = false, Token = token }; var validatedToken = JWTHelper.CheckValidToken(validateDto); if (validatedToken.IsValid) { var tblRefreshToken = (from rt in db_Evoucher.TblRefreshToken where rt.RefreshToken == _request.RefreshToken && rt.UserId == validatedToken.UserID && rt.ExpiryDate > DateTime.Now select rt).FirstOrDefault(); if (tblRefreshToken != null && tblRefreshToken.RefreshToken != "") { GetGenerateTokenDTO getGenerateToken = new GetGenerateTokenDTO { Audience = configuration["Audience"], Issuer = configuration["Issuer"], PrivateKey = configuration["PrivateKey"], TokenExpiryMinute = Int32.Parse(configuration["TokenExpiryMinute"]), RefreshTokenExpiryMinute = Int32.Parse(configuration["RefreshTokenExpiryMinute"]), UserId = validatedToken.UserID, UserName = validatedToken.UserName }; var generatedToken = JWTHelper.GenerateToken(getGenerateToken); if (generatedToken != null && string.IsNullOrEmpty(generatedToken.ErrorStatus)) { response.AccessToken = generatedToken.AccessToken; response.AccessTokenExpireMinutes = generatedToken.TokenExpiresMinute; response.RefreshToken = generatedToken.RefreshToken; response.RefreshTokenExpireMinutes = Int32.Parse(configuration["RefreshTokenExpiryMinute"]); SaveRefreshToken(new SaveRefreshTokenDTO { ExpiryMinute = generatedToken.RefreshTokenExpiresMinute, RefreshToken = generatedToken.RefreshToken, UserId = generatedToken.UserId }); DeleteRefreshToken(_request.RefreshToken); } else { response.StatusCode = 500; response.ErrorType = "Token-Generation Fail."; response.ErrorMessage = "Unable to generate Access Token."; } DeleteExpiryRefreshToken(); db_Evoucher.SaveChanges(); } else { response.StatusCode = 401; response.ErrorType = "Unauthorized Request"; response.ErrorMessage = "Invalid or Expired Refresh Token."; } } else { response.StatusCode = 401; response.ErrorType = "Unauthorized Request"; response.ErrorMessage = "Invalid or Expired Access Token."; } return(response); }