Browse Source

Configure IdentityModel request message & configure all http clients.

pull/4353/head
maliming 6 years ago
parent
commit
f3fe8d95b8
  1. 23
      framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/AbpHttpClientModule.cs
  2. 6
      framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/AbpHttpClientOptions.cs
  3. 15
      framework/src/Volo.Abp.IdentityModel/Volo/Abp/IdentityModel/IdentityModelAuthenticationService.cs
  4. 10
      framework/src/Volo.Abp.IdentityModel/Volo/Abp/IdentityModel/IdentityModelHttpRequestMessageOptions.cs

23
framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/AbpHttpClientModule.cs

@ -1,4 +1,6 @@
using Microsoft.Extensions.DependencyInjection; using System.Linq;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Http;
using Volo.Abp.Castle; using Volo.Abp.Castle;
using Volo.Abp.Modularity; using Volo.Abp.Modularity;
using Volo.Abp.MultiTenancy; using Volo.Abp.MultiTenancy;
@ -21,5 +23,24 @@ namespace Volo.Abp.Http.Client
var configuration = context.Services.GetConfiguration(); var configuration = context.Services.GetConfiguration();
Configure<AbpRemoteServiceOptions>(configuration); Configure<AbpRemoteServiceOptions>(configuration);
} }
public override void PostConfigureServices(ServiceConfigurationContext context)
{
Configure<AbpHttpClientOptions>(options =>
{
if (options.HttpClientActions.Any())
{
var httpClientNames = options.HttpClientProxies.Select(x => x.Value.RemoteServiceName);
foreach (var httpClientName in httpClientNames)
{
foreach (var httpClientAction in options.HttpClientActions)
{
context.Services.Configure<HttpClientFactoryOptions>(httpClientName,
x => x.HttpClientActions.Add(httpClientAction.Invoke(httpClientName)));
}
}
}
});
}
} }
} }

6
framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/AbpHttpClientOptions.cs

@ -1,5 +1,6 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Net.Http;
using Volo.Abp.Http.Client.DynamicProxying; using Volo.Abp.Http.Client.DynamicProxying;
namespace Volo.Abp.Http.Client namespace Volo.Abp.Http.Client
@ -8,9 +9,12 @@ namespace Volo.Abp.Http.Client
{ {
public Dictionary<Type, DynamicHttpClientProxyConfig> HttpClientProxies { get; set; } public Dictionary<Type, DynamicHttpClientProxyConfig> HttpClientProxies { get; set; }
public List<Func<string, Action<HttpClient>>> HttpClientActions { get; }
public AbpHttpClientOptions() public AbpHttpClientOptions()
{ {
HttpClientProxies = new Dictionary<Type, DynamicHttpClientProxyConfig>(); HttpClientProxies = new Dictionary<Type, DynamicHttpClientProxyConfig>();
HttpClientActions = new List<Func<string, Action<HttpClient>>>();
} }
} }
} }

15
framework/src/Volo.Abp.IdentityModel/Volo/Abp/IdentityModel/IdentityModelAuthenticationService.cs

@ -25,17 +25,20 @@ namespace Volo.Abp.IdentityModel
protected ICancellationTokenProvider CancellationTokenProvider { get; } protected ICancellationTokenProvider CancellationTokenProvider { get; }
protected IHttpClientFactory HttpClientFactory { get; } protected IHttpClientFactory HttpClientFactory { get; }
protected ICurrentTenant CurrentTenant { get; } protected ICurrentTenant CurrentTenant { get; }
protected IdentityModelHttpRequestMessageOptions IdentityModelHttpRequestMessageOptions { get; }
public IdentityModelAuthenticationService( public IdentityModelAuthenticationService(
IOptions<AbpIdentityClientOptions> options, IOptions<AbpIdentityClientOptions> options,
ICancellationTokenProvider cancellationTokenProvider, ICancellationTokenProvider cancellationTokenProvider,
IHttpClientFactory httpClientFactory, IHttpClientFactory httpClientFactory,
ICurrentTenant currentTenant) ICurrentTenant currentTenant,
IOptions<IdentityModelHttpRequestMessageOptions> identityModelHttpRequestMessageOptions)
{ {
ClientOptions = options.Value; ClientOptions = options.Value;
CancellationTokenProvider = cancellationTokenProvider; CancellationTokenProvider = cancellationTokenProvider;
HttpClientFactory = httpClientFactory; HttpClientFactory = httpClientFactory;
CurrentTenant = currentTenant; CurrentTenant = currentTenant;
IdentityModelHttpRequestMessageOptions = identityModelHttpRequestMessageOptions.Value;
Logger = NullLogger<IdentityModelAuthenticationService>.Instance; Logger = NullLogger<IdentityModelAuthenticationService>.Instance;
} }
@ -74,7 +77,7 @@ namespace Volo.Abp.IdentityModel
} }
var tokenResponse = await GetTokenResponse(discoveryResponse, configuration); var tokenResponse = await GetTokenResponse(discoveryResponse, configuration);
if (tokenResponse.IsError) if (tokenResponse.IsError)
{ {
if (tokenResponse.ErrorDescription != null) if (tokenResponse.ErrorDescription != null)
@ -112,14 +115,16 @@ namespace Volo.Abp.IdentityModel
{ {
using (var httpClient = HttpClientFactory.CreateClient(HttpClientName)) using (var httpClient = HttpClientFactory.CreateClient(HttpClientName))
{ {
return await httpClient.GetDiscoveryDocumentAsync(new DiscoveryDocumentRequest var request = new DiscoveryDocumentRequest
{ {
Address = configuration.Authority, Address = configuration.Authority,
Policy = Policy =
{ {
RequireHttps = configuration.RequireHttps RequireHttps = configuration.RequireHttps
} }
}); };
IdentityModelHttpRequestMessageOptions.ConfigureHttpRequestMessage(request);
return await httpClient.GetDiscoveryDocumentAsync(request);
} }
} }
@ -160,6 +165,7 @@ namespace Volo.Abp.IdentityModel
UserName = configuration.UserName, UserName = configuration.UserName,
Password = configuration.UserPassword Password = configuration.UserPassword
}; };
IdentityModelHttpRequestMessageOptions.ConfigureHttpRequestMessage(request);
AddParametersToRequestAsync(configuration, request); AddParametersToRequestAsync(configuration, request);
@ -177,6 +183,7 @@ namespace Volo.Abp.IdentityModel
ClientId = configuration.ClientId, ClientId = configuration.ClientId,
ClientSecret = configuration.ClientSecret ClientSecret = configuration.ClientSecret
}; };
IdentityModelHttpRequestMessageOptions.ConfigureHttpRequestMessage(request);
AddParametersToRequestAsync(configuration, request); AddParametersToRequestAsync(configuration, request);

10
framework/src/Volo.Abp.IdentityModel/Volo/Abp/IdentityModel/IdentityModelHttpRequestMessageOptions.cs

@ -0,0 +1,10 @@
using System;
using System.Net.Http;
namespace Volo.Abp.IdentityModel
{
public class IdentityModelHttpRequestMessageOptions
{
public Action<HttpRequestMessage> ConfigureHttpRequestMessage { get; set; }
}
}
Loading…
Cancel
Save