protected virtual Task AddParametersToRequestAsync(IdentityClientConfiguration configuration, ProtocolRequest request)
        {
            foreach (var pair in configuration.Where(p => p.Key.StartsWith("[o]", StringComparison.OrdinalIgnoreCase)))
            {
                request.Parameters[pair.Key] = pair.Value;
            }

            return(Task.CompletedTask);
        }
 protected virtual async Task <DiscoveryDocumentResponse> GetDiscoveryResponse(
     IdentityClientConfiguration configuration)
 {
     using (var httpClient = HttpClientFactory.CreateClient(HttpClientName))
     {
         var request = new DiscoveryDocumentRequest
         {
             Address = configuration.Authority,
             Policy  =
             {
                 RequireHttps = configuration.RequireHttps
             }
         };
         IdentityModelHttpRequestMessageOptions.ConfigureHttpRequestMessage?.Invoke(request);
         return(await httpClient.GetDiscoveryDocumentAsync(request));
     }
 }
        protected virtual Task <ClientCredentialsTokenRequest> CreateClientCredentialsTokenRequestAsync(
            DiscoveryDocumentResponse discoveryResponse,
            IdentityClientConfiguration configuration)
        {
            var request = new ClientCredentialsTokenRequest
            {
                Address      = discoveryResponse.TokenEndpoint,
                Scope        = configuration.Scope,
                ClientId     = configuration.ClientId,
                ClientSecret = configuration.ClientSecret
            };

            IdentityModelHttpRequestMessageOptions.ConfigureHttpRequestMessage?.Invoke(request);

            AddParametersToRequestAsync(configuration, request);

            return(Task.FromResult(request));
        }