Example #1
0
        public async Task <TokenResponse> GetToken()
        {
            if (_tokenExpiry != null && _tokenExpiry.Value > DateTime.UtcNow.AddMinutes(1))
            {
                return(_token);
            }

            await _refreshLock.WaitAsync();

            try
            {
                if (_tokenExpiry != null && _tokenExpiry.Value > DateTime.UtcNow.AddMinutes(1))
                {
                    return(_token);
                }

                _logger.LogDebug("Refreshing token");

                _token = await _provider.GetToken();

                _tokenExpiry = DateTime.UtcNow.AddSeconds(_token.ExpiresIn);
            }
            finally
            {
                _refreshLock.Release();
            }

            return(_token);
        }
        private async Task <Uri> GetUriAndPrepClient(string relativeUrl)
        {
            if (!Uri.TryCreate(_baseUri, relativeUrl, out var uri))
            {
                throw new Exception($"Error parsing baseUrl with relativeUrl '{relativeUrl}'");
            }

            var token = await _microServiceTokenProvider.GetToken();

            _httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token.AccessToken);

            return(uri);
        }