private void ValidateJwt(string token, string issuer, string audience, string key)
        {
            var validationParameters = new TokenValidationParameters
            {
                ValidateIssuer           = true,
                ValidIssuer              = issuer,
                ValidateAudience         = true,
                ValidAudience            = audience,
                RequireAudience          = true,
                ClockSkew                = _configuration.ClockSkew,
                ValidateLifetime         = true,
                RequireExpirationTime    = true,
                RequireSignedTokens      = true,
                ValidateIssuerSigningKey = true,
                IssuerSigningKey         = _tokenGenerator.CreateKey(key)
            };

            try
            {
                _tokenHandler.ValidateToken(token, validationParameters, out _);
            }
            catch (SecurityTokenInvalidIssuerException ex)
            {
                throw new TokenValidationException(I18n.TokenIssuerError, ex);
            }
            catch (SecurityTokenInvalidAudienceException ex)
            {
                throw new TokenValidationException(I18n.TokenAudienceError, ex);
            }
            catch (SecurityTokenInvalidSignatureException ex)
            {
                throw new TokenValidationException(I18n.TokenSignatureError, ex);
            }
            catch (SecurityTokenExpiredException ex)
            {
                throw new TokenValidationException(I18n.TokenExpiredError, ex);
            }
            catch (SecurityTokenException ex)
            {
                throw new TokenValidationException(I18n.TokenValidationError, ex);
            }
        }