From f3fe8d95b8dcd969dbe4c6284cfc2a710d558989 Mon Sep 17 00:00:00 2001 From: maliming <6908465+maliming@users.noreply.github.com> Date: Mon, 15 Jun 2020 17:24:19 +0800 Subject: [PATCH] Configure IdentityModel request message & configure all http clients. --- .../Abp/Http/Client/AbpHttpClientModule.cs | 23 ++++++++++++++++++- .../Abp/Http/Client/AbpHttpClientOptions.cs | 6 ++++- .../IdentityModelAuthenticationService.cs | 15 ++++++++---- .../IdentityModelHttpRequestMessageOptions.cs | 10 ++++++++ 4 files changed, 48 insertions(+), 6 deletions(-) create mode 100644 framework/src/Volo.Abp.IdentityModel/Volo/Abp/IdentityModel/IdentityModelHttpRequestMessageOptions.cs diff --git a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/AbpHttpClientModule.cs b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/AbpHttpClientModule.cs index e98c0738fd..e2e5b7b9fe 100644 --- a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/AbpHttpClientModule.cs +++ b/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.Modularity; using Volo.Abp.MultiTenancy; @@ -21,5 +23,24 @@ namespace Volo.Abp.Http.Client var configuration = context.Services.GetConfiguration(); Configure(configuration); } + + public override void PostConfigureServices(ServiceConfigurationContext context) + { + Configure(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(httpClientName, + x => x.HttpClientActions.Add(httpClientAction.Invoke(httpClientName))); + } + } + } + }); + } } } diff --git a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/AbpHttpClientOptions.cs b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/AbpHttpClientOptions.cs index 5adcd7525f..54cc4eb624 100644 --- a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/AbpHttpClientOptions.cs +++ b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/AbpHttpClientOptions.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Net.Http; using Volo.Abp.Http.Client.DynamicProxying; namespace Volo.Abp.Http.Client @@ -8,9 +9,12 @@ namespace Volo.Abp.Http.Client { public Dictionary HttpClientProxies { get; set; } + public List>> HttpClientActions { get; } + public AbpHttpClientOptions() { HttpClientProxies = new Dictionary(); + HttpClientActions = new List>>(); } } -} \ No newline at end of file +} diff --git a/framework/src/Volo.Abp.IdentityModel/Volo/Abp/IdentityModel/IdentityModelAuthenticationService.cs b/framework/src/Volo.Abp.IdentityModel/Volo/Abp/IdentityModel/IdentityModelAuthenticationService.cs index c192fc8feb..b338385861 100644 --- a/framework/src/Volo.Abp.IdentityModel/Volo/Abp/IdentityModel/IdentityModelAuthenticationService.cs +++ b/framework/src/Volo.Abp.IdentityModel/Volo/Abp/IdentityModel/IdentityModelAuthenticationService.cs @@ -25,17 +25,20 @@ namespace Volo.Abp.IdentityModel protected ICancellationTokenProvider CancellationTokenProvider { get; } protected IHttpClientFactory HttpClientFactory { get; } protected ICurrentTenant CurrentTenant { get; } + protected IdentityModelHttpRequestMessageOptions IdentityModelHttpRequestMessageOptions { get; } public IdentityModelAuthenticationService( IOptions options, ICancellationTokenProvider cancellationTokenProvider, IHttpClientFactory httpClientFactory, - ICurrentTenant currentTenant) + ICurrentTenant currentTenant, + IOptions identityModelHttpRequestMessageOptions) { ClientOptions = options.Value; CancellationTokenProvider = cancellationTokenProvider; HttpClientFactory = httpClientFactory; CurrentTenant = currentTenant; + IdentityModelHttpRequestMessageOptions = identityModelHttpRequestMessageOptions.Value; Logger = NullLogger.Instance; } @@ -74,7 +77,7 @@ namespace Volo.Abp.IdentityModel } var tokenResponse = await GetTokenResponse(discoveryResponse, configuration); - + if (tokenResponse.IsError) { if (tokenResponse.ErrorDescription != null) @@ -112,14 +115,16 @@ namespace Volo.Abp.IdentityModel { using (var httpClient = HttpClientFactory.CreateClient(HttpClientName)) { - return await httpClient.GetDiscoveryDocumentAsync(new DiscoveryDocumentRequest + var request = new DiscoveryDocumentRequest { Address = configuration.Authority, Policy = { RequireHttps = configuration.RequireHttps } - }); + }; + IdentityModelHttpRequestMessageOptions.ConfigureHttpRequestMessage(request); + return await httpClient.GetDiscoveryDocumentAsync(request); } } @@ -160,6 +165,7 @@ namespace Volo.Abp.IdentityModel UserName = configuration.UserName, Password = configuration.UserPassword }; + IdentityModelHttpRequestMessageOptions.ConfigureHttpRequestMessage(request); AddParametersToRequestAsync(configuration, request); @@ -177,6 +183,7 @@ namespace Volo.Abp.IdentityModel ClientId = configuration.ClientId, ClientSecret = configuration.ClientSecret }; + IdentityModelHttpRequestMessageOptions.ConfigureHttpRequestMessage(request); AddParametersToRequestAsync(configuration, request); diff --git a/framework/src/Volo.Abp.IdentityModel/Volo/Abp/IdentityModel/IdentityModelHttpRequestMessageOptions.cs b/framework/src/Volo.Abp.IdentityModel/Volo/Abp/IdentityModel/IdentityModelHttpRequestMessageOptions.cs new file mode 100644 index 0000000000..23b26faaf6 --- /dev/null +++ b/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 ConfigureHttpRequestMessage { get; set; } + } +}