diff --git a/src/Contracts/Masa.Mc.Contracts.Admin/Infrastructure/TokenGenerater.cs b/src/Contracts/Masa.Mc.Contracts.Admin/Infrastructure/TokenGenerater.cs
new file mode 100644
index 00000000..142bddb6
--- /dev/null
+++ b/src/Contracts/Masa.Mc.Contracts.Admin/Infrastructure/TokenGenerater.cs
@@ -0,0 +1,51 @@
+// Copyright (c) MASA Stack All rights reserved.
+// Licensed under the Apache License. See LICENSE.txt in the project root for license information.
+
+namespace Masa.Mc.Contracts.Admin.Infrastructure;
+
+public class TokenGenerater : ITokenGenerater
+{
+ private readonly IHttpContextAccessor _httpContextAccessor;
+ private readonly HttpClient _httpClient;
+ private readonly IMasaStackConfig _masaStackConfig;
+ private const string SCHEME = "Bearer ";
+
+ public TokenGenerater(IHttpContextAccessor httpContextAccessor, HttpClient httpClient, IMasaStackConfig masaStackConfig)
+ {
+ _httpContextAccessor = httpContextAccessor;
+ _httpClient = httpClient;
+ _masaStackConfig = masaStackConfig;
+ }
+
+ public TokenProvider Generater()
+ {
+ StringValues authenticationHeaderValue;
+
+ if (_httpContextAccessor.HttpContext?.Request.Headers.TryGetValue("Authorization", out authenticationHeaderValue) == true)
+ {
+ var accessToken = authenticationHeaderValue.ToString();
+
+ if (!string.IsNullOrEmpty(accessToken) && accessToken.StartsWith(SCHEME, StringComparison.OrdinalIgnoreCase))
+ {
+ accessToken = accessToken.Substring(SCHEME.Length).Trim();
+ }
+
+ return new TokenProvider { AccessToken = accessToken };
+ }
+
+ if (_httpContextAccessor.HttpContext == null)
+ {
+ var request = new ClientCredentialsTokenRequest
+ {
+ Address = _masaStackConfig.GetSsoDomain() + "/connect/token",
+ GrantType = BuildingBlocks.Authentication.OpenIdConnect.Models.Constans.GrantType.CLIENT_CREDENTIALS,
+ ClientId = _masaStackConfig.GetWebId(MasaStackProject.MC),
+ Scope = "MasaStack"
+ };
+ var tokenResponse = _httpClient.RequestClientCredentialsTokenAsync(request).Result;
+ return new TokenProvider { AccessToken = tokenResponse.AccessToken };
+ }
+
+ return new TokenProvider();
+ }
+}
diff --git a/src/Contracts/Masa.Mc.Contracts.Admin/Masa.Mc.Contracts.Admin.csproj b/src/Contracts/Masa.Mc.Contracts.Admin/Masa.Mc.Contracts.Admin.csproj
index 9ac19018..ff725e45 100644
--- a/src/Contracts/Masa.Mc.Contracts.Admin/Masa.Mc.Contracts.Admin.csproj
+++ b/src/Contracts/Masa.Mc.Contracts.Admin/Masa.Mc.Contracts.Admin.csproj
@@ -12,6 +12,7 @@
+
diff --git a/src/Contracts/Masa.Mc.Contracts.Admin/_Imports.cs b/src/Contracts/Masa.Mc.Contracts.Admin/_Imports.cs
index 2e4b1583..eab68325 100644
--- a/src/Contracts/Masa.Mc.Contracts.Admin/_Imports.cs
+++ b/src/Contracts/Masa.Mc.Contracts.Admin/_Imports.cs
@@ -25,4 +25,9 @@
global using System.Reflection;
global using System.Collections.ObjectModel;
global using System.ComponentModel.DataAnnotations;
-global using System.Collections.Concurrent;
\ No newline at end of file
+global using System.Collections.Concurrent;
+global using IdentityModel.Client;
+global using Masa.BuildingBlocks.StackSdks.Config;
+global using Masa.Contrib.StackSdks.Caller;
+global using Masa.Contrib.StackSdks.Config;
+global using Microsoft.Extensions.Primitives;
\ No newline at end of file
diff --git a/src/Services/Masa.Mc.Service/Program.cs b/src/Services/Masa.Mc.Service/Program.cs
index 1bb8ff44..b980110e 100644
--- a/src/Services/Masa.Mc.Service/Program.cs
+++ b/src/Services/Masa.Mc.Service/Program.cs
@@ -1,8 +1,6 @@
// Copyright (c) MASA Stack All rights reserved.
// Licensed under the Apache License. See LICENSE.txt in the project root for license information.
-using Masa.Mc.Infrastructure.Weixin.Work.Extensions;
-
var builder = WebApplication.CreateBuilder(args);
ValidatorOptions.Global.LanguageManager = new MasaLanguageManager();
@@ -97,6 +95,7 @@
Password = masaStackConfig.RedisModel.RedisPassword
};
var configuration = builder.Services.GetMasaConfiguration().ConfigurationApi.GetDefault();
+builder.Services.AddScoped();
builder.Services.AddAuthClient(masaStackConfig.GetAuthServiceDomain(), redisOptions);
builder.Services.AddMcClient(masaStackConfig.GetMcServiceDomain());
builder.Services.AddPmClient(masaStackConfig.GetPmServiceDomain());
diff --git a/src/Services/Masa.Mc.Service/_Imports.cs b/src/Services/Masa.Mc.Service/_Imports.cs
index fa1ef42b..47e8f713 100644
--- a/src/Services/Masa.Mc.Service/_Imports.cs
+++ b/src/Services/Masa.Mc.Service/_Imports.cs
@@ -114,6 +114,7 @@
global using Masa.Mc.Infrastructure.Weixin.Work.Sender;
global using Masa.Mc.Infrastructure.Weixin.Work.Work;
global using Masa.Mc.Infrastructure.Weixin.Work.WorkWebhook;
+global using Masa.Mc.Infrastructure.Weixin.Work.Extensions;
global using Masa.Mc.Service.Admin.Application.Channels.Commands;
global using Masa.Mc.Service.Admin.Application.Channels.Queries;
global using Masa.Mc.Service.Admin.Application.MessageInfos.Commands;
@@ -181,7 +182,10 @@
global using Microsoft.Extensions.DependencyInjection.Extensions;
global using Microsoft.Extensions.Options;
global using Microsoft.OpenApi.Models;
+global using Microsoft.Extensions.Primitives;
global using Moq;
global using static AlibabaCloud.SDK.Dysmsapi20170525.Models.QuerySmsTemplateListResponseBody;
global using ICsvExporter = Masa.Mc.Infrastructure.ExporterAndImporter.Csv.ICsvExporter;
global using ICsvImporter = Masa.Mc.Infrastructure.ExporterAndImporter.Csv.ICsvImporter;
+global using IdentityModel.Client;
+global using Masa.Contrib.StackSdks.Caller;
\ No newline at end of file
diff --git a/src/Web/Masa.Mc.Web.Admin.Server/Program.cs b/src/Web/Masa.Mc.Web.Admin.Server/Program.cs
index 7a592dbb..9980cd3e 100644
--- a/src/Web/Masa.Mc.Web.Admin.Server/Program.cs
+++ b/src/Web/Masa.Mc.Web.Admin.Server/Program.cs
@@ -39,6 +39,7 @@
mcBaseAddress = masaStackConfig.GetMcServiceDomain();
}
+builder.Services.AddScoped();
await builder.Services.AddMasaStackComponentsAsync(MasaStackProject.MC, "wwwroot/i18n", authBaseAddress);
builder.Services.AddHttpContextAccessor();
diff --git a/src/Web/Masa.Mc.Web.Admin.Server/_Imports.cs b/src/Web/Masa.Mc.Web.Admin.Server/_Imports.cs
index e53bced7..7a4721bc 100644
--- a/src/Web/Masa.Mc.Web.Admin.Server/_Imports.cs
+++ b/src/Web/Masa.Mc.Web.Admin.Server/_Imports.cs
@@ -28,4 +28,5 @@
global using FluentValidation.Resources;
global using Masa.BuildingBlocks.StackSdks.Config;
global using Masa.Contrib.Configuration.ConfigurationApi.Dcc;
-global using Masa.Contrib.StackSdks.Caller;
\ No newline at end of file
+global using Masa.Contrib.StackSdks.Caller;
+global using Masa.Mc.Contracts.Admin.Infrastructure;
\ No newline at end of file