protected override async Task <HttpResponseMessage> SendAsync(
            HttpRequestMessage request,
            CancellationToken cancellationToken)
        {
            if (request == null)
            {
                throw new ArgumentNullException(nameof(request));
            }

            var accessToken = _accessTokenAccessor.AccessToken;

            if (accessToken == null)
            {
                throw new InvalidOperationException("Missing access token.");
            }

            if (accessToken.IsExpired)
            {
                if (_accessTokenRefresher == null)
                {
                    throw new InvalidOperationException(
                              $"Access token is expired and there is no [{nameof(IAccessTokenRefresher)}].");
                }

                accessToken = await _accessTokenRefresher.RefreshAccessToken(
                    accessToken.RefreshToken,
                    cancellationToken);

                await _accessTokenStore.StoreTokenAsync(accessToken, cancellationToken);
            }

            request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", accessToken.Value);

            return(await base.SendAsync(request, cancellationToken));
        }