diff --git a/framework/src/Volo.Abp.IdentityModel/Volo.Abp.IdentityModel.csproj b/framework/src/Volo.Abp.IdentityModel/Volo.Abp.IdentityModel.csproj
index ce26fe7bea..6c19f18397 100644
--- a/framework/src/Volo.Abp.IdentityModel/Volo.Abp.IdentityModel.csproj
+++ b/framework/src/Volo.Abp.IdentityModel/Volo.Abp.IdentityModel.csproj
@@ -17,6 +17,7 @@
+
diff --git a/framework/src/Volo.Abp.IdentityModel/Volo/Abp/IdentityModel/AbpIdentityModelModule.cs b/framework/src/Volo.Abp.IdentityModel/Volo/Abp/IdentityModel/AbpIdentityModelModule.cs
index d0a08707b5..7ab97c49fe 100644
--- a/framework/src/Volo.Abp.IdentityModel/Volo/Abp/IdentityModel/AbpIdentityModelModule.cs
+++ b/framework/src/Volo.Abp.IdentityModel/Volo/Abp/IdentityModel/AbpIdentityModelModule.cs
@@ -1,11 +1,13 @@
using Microsoft.Extensions.DependencyInjection;
using Volo.Abp.Modularity;
+using Volo.Abp.MultiTenancy;
using Volo.Abp.Threading;
namespace Volo.Abp.IdentityModel
{
[DependsOn(
- typeof(AbpThreadingModule)
+ typeof(AbpThreadingModule),
+ typeof(AbpMultiTenancyModule)
)]
public class AbpIdentityModelModule : AbpModule
{
@@ -13,7 +15,7 @@ namespace Volo.Abp.IdentityModel
{
var configuration = context.Services.GetConfiguration();
- context.Services.AddHttpClient();
+ context.Services.AddHttpClient(IdentityModelAuthenticationService.HttpClientName);
Configure(configuration);
}
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 b78a05c684..3625aacb17 100644
--- a/framework/src/Volo.Abp.IdentityModel/Volo/Abp/IdentityModel/IdentityModelAuthenticationService.cs
+++ b/framework/src/Volo.Abp.IdentityModel/Volo/Abp/IdentityModel/IdentityModelAuthenticationService.cs
@@ -11,6 +11,7 @@ using System.Net.Http;
using System.Net.Http.Headers;
using System.Threading.Tasks;
using Volo.Abp.DependencyInjection;
+using Volo.Abp.MultiTenancy;
using Volo.Abp.Threading;
namespace Volo.Abp.IdentityModel
@@ -18,19 +19,23 @@ namespace Volo.Abp.IdentityModel
[Dependency(ReplaceServices = true)]
public class IdentityModelAuthenticationService : IIdentityModelAuthenticationService, ITransientDependency
{
+ public const string HttpClientName = "IdentityModelAuthenticationServiceHttpClientName";
public ILogger Logger { get; set; }
protected AbpIdentityClientOptions ClientOptions { get; }
protected ICancellationTokenProvider CancellationTokenProvider { get; }
protected IHttpClientFactory HttpClientFactory { get; }
+ protected ICurrentTenant CurrentTenant { get; }
public IdentityModelAuthenticationService(
IOptions options,
ICancellationTokenProvider cancellationTokenProvider,
- IHttpClientFactory httpClientFactory)
+ IHttpClientFactory httpClientFactory,
+ ICurrentTenant currentTenant)
{
ClientOptions = options.Value;
CancellationTokenProvider = cancellationTokenProvider;
HttpClientFactory = httpClientFactory;
+ CurrentTenant = currentTenant;
Logger = NullLogger.Instance;
}
@@ -46,7 +51,6 @@ namespace Volo.Abp.IdentityModel
SetAccessToken(client, accessToken);
return true;
-
}
protected virtual async Task GetAccessTokenOrNullAsync(string identityClientName)
@@ -106,40 +110,39 @@ namespace Volo.Abp.IdentityModel
protected virtual async Task GetDiscoveryResponse(
IdentityClientConfiguration configuration)
{
- using (var httpClient = HttpClientFactory.CreateClient())
+ var httpClient = HttpClientFactory.CreateClient(HttpClientName);
+ return await httpClient.GetDiscoveryDocumentAsync(new DiscoveryDocumentRequest
{
- return await httpClient.GetDiscoveryDocumentAsync(new DiscoveryDocumentRequest
+ Address = configuration.Authority,
+ Policy =
{
- Address = configuration.Authority,
- Policy =
- {
- RequireHttps = configuration.RequireHttps
- }
- });
- }
+ RequireHttps = configuration.RequireHttps
+ }
+ });
}
protected virtual async Task GetTokenResponse(
DiscoveryDocumentResponse discoveryResponse,
IdentityClientConfiguration configuration)
{
- using (var httpClient = HttpClientFactory.CreateClient())
+ var httpClient = HttpClientFactory.CreateClient(HttpClientName);
+
+ AddHeaders(httpClient);
+
+ switch (configuration.GrantType)
{
- switch (configuration.GrantType)
- {
- case OidcConstants.GrantTypes.ClientCredentials:
- return await httpClient.RequestClientCredentialsTokenAsync(
- await CreateClientCredentialsTokenRequestAsync(discoveryResponse, configuration),
- CancellationTokenProvider.Token
- );
- case OidcConstants.GrantTypes.Password:
- return await httpClient.RequestPasswordTokenAsync(
- await CreatePasswordTokenRequestAsync(discoveryResponse, configuration),
- CancellationTokenProvider.Token
- );
- default:
- throw new AbpException("Grant type was not implemented: " + configuration.GrantType);
- }
+ case OidcConstants.GrantTypes.ClientCredentials:
+ return await httpClient.RequestClientCredentialsTokenAsync(
+ await CreateClientCredentialsTokenRequestAsync(discoveryResponse, configuration),
+ CancellationTokenProvider.Token
+ );
+ case OidcConstants.GrantTypes.Password:
+ return await httpClient.RequestPasswordTokenAsync(
+ await CreatePasswordTokenRequestAsync(discoveryResponse, configuration),
+ CancellationTokenProvider.Token
+ );
+ default:
+ throw new AbpException("Grant type was not implemented: " + configuration.GrantType);
}
}
@@ -186,5 +189,15 @@ namespace Volo.Abp.IdentityModel
return Task.CompletedTask;
}
+
+ protected virtual void AddHeaders(HttpClient client)
+ {
+ //tenantId
+ if (CurrentTenant.Id.HasValue)
+ {
+ //TODO: Use AbpAspNetCoreMultiTenancyOptions to get the key
+ client.DefaultRequestHeaders.Add(TenantResolverConsts.DefaultTenantKey, CurrentTenant.Id.Value.ToString());
+ }
+ }
}
}