internal static async Task <TokenResponse> ExecuteAsync(
            this ImpersonationRequest request, HttpClient httpClient, string url,
            IClock clock, ILogger logger, CancellationToken cancellationToken)
        {
            var response = await request.ExecuteAsync(httpClient, url, cancellationToken).ConfigureAwait(false);

            return(await TokenResponse.FromHttpResponseAsync(response, clock, logger).ConfigureAwait(false));
        }
        internal static async Task <TResponse> ExecuteAsync <TResponse>(
            this ImpersonationRequest request, HttpClient httpClient, string url, CancellationToken cancellationToken)
        {
            var response = await request.ExecuteAsync(httpClient, url, cancellationToken).ConfigureAwait(false);

            response.EnsureSuccessStatusCode();
            return(await NewtonsoftJsonSerializer.Instance.DeserializeAsync <TResponse>(
                       await response.Content.ReadAsStreamAsync().ConfigureAwait(false), cancellationToken).ConfigureAwait(false));
        }