diff --git a/framework/src/Volo.Abp.Dapr/Volo/Abp/Dapr/AbpDaprClientFactory.cs b/framework/src/Volo.Abp.Dapr/Volo/Abp/Dapr/AbpDaprClientFactory.cs index b678b442db..4f6fde67b4 100644 --- a/framework/src/Volo.Abp.Dapr/Volo/Abp/Dapr/AbpDaprClientFactory.cs +++ b/framework/src/Volo.Abp.Dapr/Volo/Abp/Dapr/AbpDaprClientFactory.cs @@ -10,21 +10,19 @@ public class AbpDaprClientFactory : IAbpDaprClientFactory, ISingletonDependency { protected AbpDaprOptions DaprOptions { get; } protected JsonSerializerOptions JsonSerializerOptions { get; } + protected IDaprApiTokenProvider DaprApiTokenProvider { get; } public AbpDaprClientFactory( IOptions options, - IOptions systemTextJsonSerializerOptions) + IOptions systemTextJsonSerializerOptions, + IDaprApiTokenProvider daprApiTokenProvider) { + DaprApiTokenProvider = daprApiTokenProvider; DaprOptions = options.Value; JsonSerializerOptions = CreateJsonSerializerOptions(systemTextJsonSerializerOptions.Value); } - protected virtual JsonSerializerOptions CreateJsonSerializerOptions(AbpSystemTextJsonSerializerOptions systemTextJsonSerializerOptions) - { - return new JsonSerializerOptions(systemTextJsonSerializerOptions.JsonSerializerOptions); - } - - public virtual Task CreateAsync(Action? builderAction = null) + public virtual async Task CreateAsync(Action? builderAction = null) { var builder = new DaprClientBuilder() .UseJsonSerializationOptions(JsonSerializerOptions); @@ -39,12 +37,18 @@ public class AbpDaprClientFactory : IAbpDaprClientFactory, ISingletonDependency builder.UseGrpcEndpoint(DaprOptions.GrpcEndpoint); } + var apiToken = await DaprApiTokenProvider.GetAsync(); + if (!apiToken.IsNullOrWhiteSpace()) + { + builder.UseDaprApiToken(apiToken); + } + builderAction?.Invoke(builder); - return Task.FromResult(builder.Build()); + return builder.Build(); } - public Task CreateHttpClientAsync( + public virtual async Task CreateHttpClientAsync( string? appId = null, string? daprEndpoint = null, string? daprApiToken = null) @@ -54,7 +58,16 @@ public class AbpDaprClientFactory : IAbpDaprClientFactory, ISingletonDependency { daprEndpoint = DaprOptions.HttpEndpoint; } - - return Task.FromResult(DaprClient.CreateInvokeHttpClient(appId, daprEndpoint, daprApiToken)); + + return DaprClient.CreateInvokeHttpClient( + appId, + daprEndpoint, + daprApiToken ?? await DaprApiTokenProvider.GetAsync() + ); + } + + protected virtual JsonSerializerOptions CreateJsonSerializerOptions(AbpSystemTextJsonSerializerOptions systemTextJsonSerializerOptions) + { + return new JsonSerializerOptions(systemTextJsonSerializerOptions.JsonSerializerOptions); } } \ No newline at end of file diff --git a/framework/src/Volo.Abp.Dapr/Volo/Abp/Dapr/AbpDaprOptions.cs b/framework/src/Volo.Abp.Dapr/Volo/Abp/Dapr/AbpDaprOptions.cs index e6919783af..1453c0aac0 100644 --- a/framework/src/Volo.Abp.Dapr/Volo/Abp/Dapr/AbpDaprOptions.cs +++ b/framework/src/Volo.Abp.Dapr/Volo/Abp/Dapr/AbpDaprOptions.cs @@ -5,4 +5,6 @@ public class AbpDaprOptions public string HttpEndpoint { get; set; } public string GrpcEndpoint { get; set; } -} + + public string DaprApiToken { get; set; } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.Dapr/Volo/Abp/Dapr/DaprApiTokenProvider.cs b/framework/src/Volo.Abp.Dapr/Volo/Abp/Dapr/DaprApiTokenProvider.cs new file mode 100644 index 0000000000..8f0cd104b0 --- /dev/null +++ b/framework/src/Volo.Abp.Dapr/Volo/Abp/Dapr/DaprApiTokenProvider.cs @@ -0,0 +1,19 @@ +using Microsoft.Extensions.Options; +using Volo.Abp.DependencyInjection; + +namespace Volo.Abp.Dapr; + +public class DaprApiTokenProvider : IDaprApiTokenProvider, ISingletonDependency +{ + public AbpDaprOptions Options { get; } + + public DaprApiTokenProvider(IOptions options) + { + Options = options.Value; + } + + public virtual Task GetAsync() + { + return Task.FromResult(Options.DaprApiToken); + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.Dapr/Volo/Abp/Dapr/IDaprApiTokenProvider.cs b/framework/src/Volo.Abp.Dapr/Volo/Abp/Dapr/IDaprApiTokenProvider.cs new file mode 100644 index 0000000000..e122d3c201 --- /dev/null +++ b/framework/src/Volo.Abp.Dapr/Volo/Abp/Dapr/IDaprApiTokenProvider.cs @@ -0,0 +1,6 @@ +namespace Volo.Abp.Dapr; + +public interface IDaprApiTokenProvider +{ + Task GetAsync(); +} \ No newline at end of file