private void ConfigureAuthentication(ServiceConfigurationContext context, IConfiguration configuration) {
//Configure<AbpAntiForgeryOptions>(options =>
//{
// options.TokenCookie.Expiration = TimeSpan.FromDays(365);
// options.TokenCookie.SameSite = SameSiteMode.None;
// options.TokenCookie.SecurePolicy = CookieSecurePolicy.Always;
//});
context.Services.AddAuthentication(options =>
{
options.DefaultScheme = "Cookies";
options.DefaultChallengeScheme = "oidc";
})
.AddCookie("Cookies", options =>
{
options.ExpireTimeSpan = TimeSpan.FromDays(365);
options.IntrospectAccessToken();
})
.AddAbpOpenIdConnect("oidc", options =>
{
options.Authority = configuration["AuthServer:Authority"];
options.RequireHttpsMetadata = configuration.GetValue<bool>("AuthServer:RequireHttpsMetadata");;
options.ResponseType = OpenIdConnectResponseType.CodeIdToken;
options.ClientId = configuration["AuthServer:ClientId"];
options.ClientSecret = configuration["AuthServer:ClientSecret"];
options.SaveTokens = true;
options.GetClaimsFromUserInfoEndpoint = true;
options.Scope.Add("roles");
options.Scope.Add("email");
options.Scope.Add("phone");
options.Scope.Add("Master9");
});
if (configuration.GetValue<bool>("AuthServer:IsOnK8s"))
{
context.Services.Configure<OpenIdConnectOptions>("oidc", options =>
{
options.TokenValidationParameters.ValidIssuers = new[]
{
configuration["AuthServer:MetaAddress"]!.EnsureEndsWith('/'),
configuration["AuthServer:Authority"]!.EnsureEndsWith('/')
};
options.MetadataAddress = configuration["AuthServer:MetaAddress"]!.EnsureEndsWith('/') +
".well-known/openid-configuration";
var previousOnRedirectToIdentityProvider = options.Events.OnRedirectToIdentityProvider;
options.Events.OnRedirectToIdentityProvider = async ctx =>
{
// Intercept the redirection so the browser navigates to the right URL in your host
ctx.ProtocolMessage.IssuerAddress = configuration["AuthServer:Authority"]!.EnsureEndsWith('/') + "connect/authorize";
if (previousOnRedirectToIdentityProvider != null)
{
await previousOnRedirectToIdentityProvider(ctx);
}
};
var previousOnRedirectToIdentityProviderForSignOut = options.Events.OnRedirectToIdentityProviderForSignOut;
options.Events.OnRedirectToIdentityProviderForSignOut = async ctx =>
{
// Intercept the redirection for signout so the browser navigates to the right URL in your host
ctx.ProtocolMessage.IssuerAddress = configuration["AuthServer:Authority"]!.EnsureEndsWith('/') + "connect/endsession";
if (previousOnRedirectToIdentityProviderForSignOut != null)
{
await previousOnRedirectToIdentityProviderForSignOut(ctx);
}
};
});
}
context.Services.Configure<AbpClaimsPrincipalFactoryOptions>(options =>
{
options.IsDynamicClaimsEnabled = true;
});
}
private void ConfigureImpersonation(ServiceConfigurationContext context, IConfiguration configuration)
{
context.Services.Configure<SaasHostBlazorOptions>(options =>
{
options.EnableTenantImpersonation = true;
});
context.Services.Configure<AbpIdentityProBlazorOptions>(options =>
{
options.EnableUserImpersonation = true;
});
}
private void ConfigureVirtualFileSystem(IWebHostEnvironment hostingEnvironment)
{
if (hostingEnvironment.IsDevelopment())
{
Configure<AbpVirtualFileSystemOptions>(options =>
{
options.FileSets.ReplaceEmbeddedByPhysical<Master9DomainSharedModule>(Path.Combine(hostingEnvironment.ContentRootPath, $"..{Path.DirectorySeparatorChar}Master9.Domain.Shared"));
options.FileSets.ReplaceEmbeddedByPhysical<Master9ApplicationContractsModule>(Path.Combine(hostingEnvironment.ContentRootPath, $"..{Path.DirectorySeparatorChar}Master9.Application.Contracts"));
options.FileSets.ReplaceEmbeddedByPhysical<Master9BlazorModule>(hostingEnvironment.ContentRootPath);
});
}
}
private void ConfigureSwaggerServices(IServiceCollection services)
{
services.AddAbpSwaggerGen(
options =>
{
options.SwaggerDoc("v1", new OpenApiInfo { Title = "Master9 API", Version = "v1" });
options.DocInclusionPredicate((docName, description) => true);
options.CustomSchemaIds(type => type.FullName);
}
);
}
private void ConfigureCache(IConfiguration configuration)
{
Configure<AbpDistributedCacheOptions>(options =>
{
options.KeyPrefix = "Master9:";
});
}
private void ConfigureDataProtection(
ServiceConfigurationContext context,
IConfiguration configuration,
IWebHostEnvironment hostingEnvironment)
{
var dataProtectionBuilder = context.Services.AddDataProtection().SetApplicationName("Master9");
if (!hostingEnvironment.IsDevelopment())
{
var redis = ConnectionMultiplexer.Connect(configuration["Redis:Configuration"]!);
dataProtectionBuilder.PersistKeysToStackExchangeRedis(redis, "Master9-Protection-Keys");
}
}
private void ConfigureDistributedLocking(
ServiceConfigurationContext context,
IConfiguration configuration)
{
context.Services.AddSingleton<IDistributedLockProvider>(sp =>
{
var connection = ConnectionMultiplexer.Connect(configuration["Redis:Configuration"]!);
return new RedisDistributedSynchronizationProvider(connection.GetDatabase());
});
}
private void ConfigureBlazorise(ServiceConfigurationContext context)
{
context.Services
.AddBootstrap5Providers()
.AddFontAwesomeIcons();
}
private void ConfigureMenu(IConfiguration configuration)
{
Configure<AbpNavigationOptions>(options =>
{
options.MenuContributors.Add(new Master9MenuContributor(configuration));
});
}
private void ConfigureRouter()
{
Configure<AbpRouterOptions>(options =>
{
options.AppAssembly = typeof(Master9BlazorModule).Assembly;
options.AdditionalAssemblies.Add(typeof(Master9BlazorClientModule).Assembly);
});
}
private void ConfigureAutoMapper()
{
Configure<AbpAutoMapperOptions>(options =>
{
options.AddMaps<Master9BlazorModule>();
});
}
public override void OnApplicationInitialization(ApplicationInitializationContext context)
{
var env = context.GetEnvironment();
var app = context.GetApplicationBuilder();
app.Use(async (ctx, next) =>
{
/* Converting to https to be able to include https URLs in `/.well-known/openid-configuration` endpoint.
* This should only be done if the request is coming outside of the cluster. */
if (ctx.Request.Headers.ContainsKey("from-ingress"))
{
ctx.Request.Scheme = "https";
}
await next();
});
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseAbpRequestLocalization();
if (!env.IsDevelopment())
{
app.UseErrorPage();
app.UseHsts();
}
app.UseCorrelationId();
app.UseRouting();
var configuration = context.GetConfiguration();
if (Convert.ToBoolean(configuration["AuthServer:IsOnK8s"]))
{
app.Use(async (context, next) =>
{
if (context.Request.Path.Value != null &&
context.Request.Path.Value.StartsWith("/appsettings", StringComparison.OrdinalIgnoreCase) &&
context.Request.Path.Value.EndsWith(".json", StringComparison.OrdinalIgnoreCase))
{
// Set endpoint to null so the static files middleware will handle the request.
context.SetEndpoint(null);
}
await next(context);
});
app.UseStaticFilesForPatterns("appsettings*.json");
}
app.MapAbpStaticAssets();
app.UseAbpSecurityHeaders();
app.UseAuthentication();
if (MultiTenancyConsts.IsEnabled)
{
app.UseMultiTenancy();
}
app.UseDynamicClaims();
app.UseAntiforgery();
app.UseAuthorization();
app.UseSwagger();
app.UseAbpSwaggerUI(options =>
{
options.SwaggerEndpoint("/swagger/v1/swagger.json", "Master9 API");
});
app.UseAbpSerilogEnrichers();
app.UseConfiguredEndpoints(builder =>
{
builder.MapRazorComponents<App>()
.AddInteractiveServerRenderMode()
.AddInteractiveWebAssemblyRenderMode()
.AddAdditionalAssemblies(builder.ServiceProvider.GetRequiredService<IOptions<AbpRouterOptions>>().Value.AdditionalAssemblies.ToArray());
});
}
InteractiveServer 模式正常.
blazor
using System;
using System.IO;
using Blazorise.Bootstrap5;
using Blazorise.Icons.FontAwesome;
using Medallion.Threading;
using Medallion.Threading.Redis;
using Microsoft.AspNetCore.Authentication.Cookies;
using Microsoft.AspNetCore.Authentication.OpenIdConnect;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.AspNetCore.Http;
using Master9.Localization;
using Master9.MultiTenancy;
using Volo.Abp;
using Volo.Abp.AspNetCore.Components.Web.Theming.Routing;
using Volo.Abp.AspNetCore.Mvc.Localization;
using Volo.Abp.AspNetCore.Mvc.UI.Bundling;
using Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared;
using Volo.Abp.AspNetCore.Serilog;
using Volo.Abp.Autofac;
using Volo.Abp.AutoMapper;
using Volo.Abp.Localization;
using Volo.Abp.Modularity;
using Volo.Abp.Swashbuckle;
using Volo.Abp.UI.Navigation;
using Volo.Abp.UI.Navigation.Urls;
using Volo.Abp.VirtualFileSystem;
using Microsoft.AspNetCore.DataProtection;
using Microsoft.Extensions.Options;
using Microsoft.IdentityModel.Protocols.OpenIdConnect;
using Microsoft.OpenApi.Models;
using Master9.Blazor.Client;
using Master9.Blazor.Client.Navigation;
using Master9.Blazor.Components;
using StackExchange.Redis;
using Volo.Abp.AspNetCore.Authentication.OpenIdConnect;
using Volo.Abp.AspNetCore.Components.Web;
using Volo.Abp.AspNetCore.Mvc.Client;
using Volo.Abp.Caching;
using Volo.Abp.Caching.StackExchangeRedis;
using Volo.Abp.AspNetCore.Components.WebAssembly.Theming.Bundling;
using Volo.Abp.AspNetCore.Components.Web.LeptonXTheme;
using Volo.Abp.AspNetCore.Components.Server.LeptonXTheme;
using Volo.Abp.AspNetCore.Components.Server.LeptonXTheme.Bundling;
using Volo.Abp.AspNetCore.Components.WebAssembly.LeptonXTheme.Bundling;
using Volo.Abp.AspNetCore.Mvc.UI.Theme.LeptonX;
using Volo.Abp.AspNetCore.Mvc.UI.Theme.LeptonX.Bundling;
using Volo.Abp.LeptonX.Shared;
using Volo.Abp.DistributedLocking;
using Volo.Abp.Http.Client.Web;
using Volo.Abp.Http.Client.IdentityModel.Web;
using Volo.Abp.Security.Claims;
using Volo.Abp.Account.LinkUsers;
using Volo.Abp.Account.Pro.Admin.Blazor.Server;
using Volo.Abp.Account.Pro.Public.Blazor.Server;
using Volo.Abp.Account.Public.Web.Impersonation;
using Volo.Abp.Account.Pro.Public.Blazor.WebAssembly.Bundling;
using Volo.Abp.Identity.Pro.Blazor;
using Volo.Abp.Identity.Pro.Blazor.Server;
using Volo.Abp.AuditLogging.Blazor.Server;
using Volo.Abp.AuditLogging.Blazor.WebAssembly.Bundling;
using Volo.Abp.Gdpr.Blazor.Extensions;
using Volo.Abp.Gdpr.Blazor.Server;
using Volo.Abp.LanguageManagement.Blazor.Server;
using Volo.Abp.OpenIddict.Pro.Blazor.Server;
using Volo.Abp.TextTemplateManagement.Blazor.Server;
using Volo.Saas.Host;
using Volo.Saas.Host.Blazor;
using Volo.Saas.Host.Blazor.Server;
using Volo.Saas.Host.Blazor.WebAssembly.Bundling;
using FollowUp.Blazor.Server;
using Contract.Blazor.Server;
using System.Net.Http;
using DevExpress.Blazor;
using Volo.Abp.AspNetCore.Mvc.AntiForgery;
using Volo.Abp.FeatureManagement;
namespace Master9.Blazor;
[DependsOn(
typeof(AbpCachingStackExchangeRedisModule),
typeof(AbpDistributedLockingModule),
typeof(AbpAutofacModule),
typeof(AbpAccountPublicBlazorWebAssemblyBundlingModule),
typeof(AbpAccountPublicWebImpersonationModule),
typeof(AbpAccountAdminBlazorServerModule),
typeof(AbpAccountPublicBlazorServerModule),
typeof(AbpIdentityProBlazorServerModule),
typeof(TextTemplateManagementBlazorServerModule),
typeof(AbpAuditLoggingBlazorServerModule),
typeof(AbpAuditLoggingBlazorWebAssemblyBundlingModule),
typeof(AbpGdprBlazorServerModule),
typeof(AbpOpenIddictProBlazorServerModule),
typeof(LanguageManagementBlazorServerModule),
typeof(SaasHostBlazorServerModule),
typeof(SaasHostBlazorWebAssemblyBundlingModule),
//typeof(LeptonXThemeManagementBlazorServerModule),
typeof(AbpAspNetCoreComponentsServerLeptonXThemeModule),
typeof(AbpAspNetCoreComponentsWebAssemblyLeptonXThemeBundlingModule),
typeof(AbpAspNetCoreMvcUiLeptonXThemeModule),
typeof(AbpFeatureManagementHttpApiModule),
typeof(AbpSwashbuckleModule),
typeof(AbpAspNetCoreSerilogModule),
typeof(AbpAspNetCoreMvcClientModule),
typeof(AbpAspNetCoreAuthenticationOpenIdConnectModule),
typeof(AbpHttpClientWebModule),
typeof(AbpHttpClientIdentityModelWebModule),
typeof(Master9HttpApiClientModule)
)]
[DependsOn(typeof(FollowUpBlazorServerModule))]
[DependsOn(typeof(ContractBlazorServerModule))]
public class Master9BlazorModule : AbpModule
{
public override void PreConfigureServices(ServiceConfigurationContext context)
{
context.Services.PreConfigure<AbpMvcDataAnnotationsLocalizationOptions>(options =>
{
options.AddAssemblyResource(
typeof(Master9Resource),
typeof(Master9DomainSharedModule).Assembly,
typeof(Master9ApplicationContractsModule).Assembly,
typeof(Master9BlazorModule).Assembly
);
});
PreConfigure<AbpAspNetCoreComponentsWebOptions>(options =>
{
options.IsBlazorWebApp = true;
});
}
public override void ConfigureServices(ServiceConfigurationContext context)
{
var hostingEnvironment = context.Services.GetHostingEnvironment();
var configuration = context.Services.GetConfiguration();
if (!configuration.GetValue<bool>("App:DisablePII"))
{
Microsoft.IdentityModel.Logging.IdentityModelEventSource.ShowPII = true;
Microsoft.IdentityModel.Logging.IdentityModelEventSource.LogCompleteSecurityArtifact = true;
}
// Add services to the container.
context.Services.AddRazorComponents()
.AddInteractiveServerComponents()
.AddInteractiveWebAssemblyComponents();
context.Services.AddDevExpressBlazor(configure => configure.BootstrapVersion = BootstrapVersion.v5);
ConfigureUrls(configuration);
ConfigureBundles();
ConfigureAuthentication(context, configuration);
ConfigureImpersonation(context, configuration);
ConfigureAutoMapper();
ConfigureVirtualFileSystem(hostingEnvironment);
ConfigureSwaggerServices(context.Services);
ConfigureCache(configuration);
ConfigureDataProtection(context, configuration, hostingEnvironment);
ConfigureDistributedLocking(context, configuration);
ConfigureBlazorise(context);
ConfigureRouter();
ConfigureMenu(configuration);
ConfigureCookieConsent(context);
ConfigureTheme();
}
private void ConfigureCookieConsent(ServiceConfigurationContext context)
{
context.Services.AddAbpCookieConsent(options =>
{
options.IsEnabled = true;
options.CookiePolicyUrl = "/CookiePolicy";
options.PrivacyPolicyUrl = "/PrivacyPolicy";
});
}
private void ConfigureTheme()
{
Configure<LeptonXThemeOptions>(options =>
{
options.DefaultStyle = LeptonXStyleNames.System;
});
Configure<LeptonXThemeBlazorOptions>(options =>
{
options.Layout = LeptonXBlazorLayouts.SideMenu;
});
}
private void ConfigureUrls(IConfiguration configuration)
{
Configure<AppUrlOptions>(options =>
{
options.Applications["MVC"].RootUrl = configuration["App:SelfUrl"];
});
Configure<AbpAccountLinkUserOptions>(options =>
{
options.LoginUrl = configuration["AuthServer:Authority"];
});
}
private void ConfigureBundles()
{
Configure<AbpBundlingOptions>(options =>
{
// Blazor Web App
options.Parameters.InteractiveAuto = true;
// MVC UI
options.StyleBundles.Configure(
LeptonXThemeBundles.Styles.Global,
bundle =>
{
bundle.AddFiles("/global-styles.css");
}
);
options.ScriptBundles.Configure(
LeptonXThemeBundles.Scripts.Global,
bundle =>
{
bundle.AddFiles("/global-scripts.js");
}
);
// Blazor UI
options.StyleBundles.Configure(
BlazorLeptonXThemeBundles.Styles.Global,
bundle =>
{
bundle.AddFiles("/global-styles.css");
//bundle.AddFiles("/blazor-global-styles.css");
//You can remove the following line if you don't use Blazor CSS isolation for components
//bundle.AddFiles(new BundleFile("/Master9.Blazor.styles.css", true));
//bundle.AddFiles(new BundleFile("/Master9.Blazor.Client.styles.css", true));
}
);
});
Configure<AbpBundlingOptions>(options =>
{
var globalStyles = options.StyleBundles.Get(BlazorWebAssemblyStandardBundles.Styles.Global);
globalStyles.AddContributors(typeof(Master9StyleBundleContributor));
var globalScripts = options.ScriptBundles.Get(BlazorWebAssemblyStandardBundles.Scripts.Global);
globalScripts.AddContributors(typeof(Master9ScriptBundleContributor));
options.Parameters["LeptonXTheme.Layout"] = "side-menu"; // side-menu or top-menu
});
}
}
已发送
已发送.目前主要是登陆后状态丢失
从代码上看直接重定向到了首页,触发登陆.没有相关请求登出操作,不清楚为什么 已发送代码到邮箱
我访问https://master.aysdlrmyy.com:28443/Passwordless/Login?userId=admin&token=123 后自动跳转到blazor的"/"
authserver
public class PasswordlessController : AbpController
{
protected IdentityUserManager UserManager { get; }
protected AbpSignInManager SignInManager { get; }
public PasswordlessController(IdentityUserManager userManager, AbpSignInManager signInManager)
{
UserManager = userManager;
SignInManager = signInManager;
}
[HttpGet("Login")]
public virtual async Task<IActionResult> Login(string token, string userId)
{
var user = await UserManager.FindByNameAsync(userId);
//测试用 只使用userId 后台直接获取token
var token2 = await UserManager.GenerateUserTokenAsync(user, "PasswordlessLoginProvider",
"passwordless-auth");
var isValid = await UserManager.VerifyUserTokenAsync(user, "PasswordlessLoginProvider", "passwordless-auth", token2);
if (!isValid)
{
throw new UnauthorizedAccessException("The token " + token + " is not valid for the user " + userId);
}
await UserManager.UpdateSecurityStampAsync(user);
await SignInManager.SignInAsync(user, isPersistent: false);
var blazorserver = "http://master.aysdlrmyy.com:28444";
return Redirect(blazorserver);
}
}
blazor
@page "/"
@inherits Master9ComponentBase
@using Contract.FlowUsers
@using DevExpress.Blazor
@using Mc;
@using Microsoft.AspNetCore.Authorization
@inject IFlowUsersAppService FlowUsersAppService
@attribute [Authorize]
<h1>
123
</h1>`
添加后没有报错了 但是会反复触发认证
2025-09-18 11:53:30.764 +08:00 [INF] AuthenticationScheme: Cookies signed out. 2025-09-18 11:53:30.765 +08:00 [INF] Executing SignOutResult with authentication schemes (["oidc"]). 2025-09-18 11:53:30.765 +08:00 [INF] AuthenticationScheme: oidc signed out. 2025-09-18 11:53:30.765 +08:00 [INF] Executed action Master9.Blazor.Controllers.AccountController.LogoutAsync (Master9.Blazor) in 1.645ms 2025-09-18 11:53:30.765 +08:00 [INF] Executed endpoint 'Master9.Blazor.Controllers.AccountController.LogoutAsync (Master9.Blazor)' 2025-09-18 11:53:30.765 +08:00 [INF] Request finished HTTP/1.1 GET http://master.aysdlrmyy.com:28444/Account/Logout - 302 null null 2.9495ms 2025-09-18 11:53:30.770 +08:00 [INF] Request starting HTTP/1.1 GET http://master.aysdlrmyy.com:28444/_content/Blazorise/vendors/jsencrypt.js?v=1.6.2.0 - null null 2025-09-18 11:53:30.770 +08:00 [INF] Request starting HTTP/1.1 GET http://master.aysdlrmyy.com:28444/_content/Blazorise/vendors/sha512.js?v=1.6.2.0 - null null 2025-09-18 11:53:30.770 +08:00 [INF] Executing endpoint 'Microsoft.AspNetCore.Routing.RouteEndpoint' 2025-09-18 11:53:30.770 +08:00 [INF] Executing endpoint 'Microsoft.AspNetCore.Routing.RouteEndpoint' 2025-09-18 11:53:30.770 +08:00 [INF] The file _content/Blazorise/vendors/sha512.js was not modified 2025-09-18 11:53:30.770 +08:00 [INF] The file _content/Blazorise/vendors/jsencrypt.js was not modified 2025-09-18 11:53:30.770 +08:00 [INF] Executed endpoint 'Microsoft.AspNetCore.Routing.RouteEndpoint' 2025-09-18 11:53:30.770 +08:00 [INF] Executed endpoint 'Microsoft.AspNetCore.Routing.RouteEndpoint' 2025-09-18 11:53:30.770 +08:00 [INF] Request finished HTTP/1.1 GET http://master.aysdlrmyy.com:28444/_content/Blazorise/vendors/sha512.js?v=1.6.2.0 - 304 null text/javascript 0.6231ms 2025-09-18 11:53:30.770 +08:00 [INF] Request finished HTTP/1.1 GET http://master.aysdlrmyy.com:28444/_content/Blazorise/vendors/jsencrypt.js?v=1.6.2.0 - 304 null text/javascript 0.7513ms 2025-09-18 11:53:30.785 +08:00 [INF] Request starting HTTP/1.1 GET http://master.aysdlrmyy.com:28444/signout-callback-oidc?state=CfDJ8D2ygYFMKaZGvAEpZ3bmx8mpxka9ME4C9_R_kPwnxdQmQMtUUzUlU8U5mlflyQPoFlbyPPrLyu8RDUIaH4pkgGSD2KIpU75HGeHihfjzq_OUXVTcHK74pYeXreKlgTGoId_rywR_ykAcc6NxzHrY2zA - null null 2025-09-18 11:53:30.786 +08:00 [INF] Request finished HTTP/1.1 GET http://master.aysdlrmyy.com:28444/signout-callback-oidc?state=CfDJ8D2ygYFMKaZGvAEpZ3bmx8mpxka9ME4C9_R_kPwnxdQmQMtUUzUlU8U5mlflyQPoFlbyPPrLyu8RDUIaH4pkgGSD2KIpU75HGeHihfjzq_OUXVTcHK74pYeXreKlgTGoId_rywR_ykAcc6NxzHrY2zA - 302 null null 0.5648ms 2025-09-18 11:53:30.790 +08:00 [INF] Request starting HTTP/1.1 GET http://master.aysdlrmyy.com:28444/ - null null 2025-09-18 11:53:30.790 +08:00 [INF] Executing endpoint '/ (/)' 2025-09-18 11:53:30.794 +08:00 [INF] Authorization failed. These requirements were not met: PermissionRequirement: SettingManagement.Emailing 2025-09-18 11:53:30.794 +08:00 [INF] Authorization failed. These requirements were not met: PermissionRequirement: AbpAccount.SettingManagement
auth
2025-09-18 11:52:57.339 +08:00 [INF] Request starting HTTP/2 GET https://master.aysdlrmyy.com:28443/Passwordless/Login?userId=admin&token=123 - null null 2025-09-18 11:52:57.343 +08:00 [INF] Executing endpoint 'Master9.Custom.PasswordlessController.Login (Master9.AuthServer)' 2025-09-18 11:52:57.352 +08:00 [INF] Route matched with {action = "Login", controller = "Passwordless", area = "", page = ""}. Executing controller action with signature System.Threading.Tasks.Task1[Microsoft.AspNetCore.Mvc.IActionResult] Login(System.String, System.String) on controller Master9.Custom.PasswordlessController (Master9.AuthServer).
2025-09-18 11:52:58.325 +08:00 [WRN] No store type was specified for the decimal property 'AmountMax' on entity type 'ContractAmount'. This will cause values to be silently truncated if they do not fit in the default precision and scale. Explicitly specify the SQL server column type that can accommodate all the values in 'OnModelCreating' using 'HasColumnType', specify precision and scale using 'HasPrecision', or configure a value converter using 'HasConversion'.
2025-09-18 11:52:58.325 +08:00 [WRN] No store type was specified for the decimal property 'AmountMini' on entity type 'ContractAmount'. This will cause values to be silently truncated if they do not fit in the default precision and scale. Explicitly specify the SQL server column type that can accommodate all the values in 'OnModelCreating' using 'HasColumnType', specify precision and scale using 'HasPrecision', or configure a value converter using 'HasConversion'.
2025-09-18 11:52:58.325 +08:00 [WRN] No store type was specified for the decimal property 'Amount' on entity type 'ContractMain'. This will cause values to be silently truncated if they do not fit in the default precision and scale. Explicitly specify the SQL server column type that can accommodate all the values in 'OnModelCreating' using 'HasColumnType', specify precision and scale using 'HasPrecision', or configure a value converter using 'HasConversion'.
2025-09-18 11:52:58.325 +08:00 [WRN] No store type was specified for the decimal property 'Amount' on entity type 'DefaultRecord'. This will cause values to be silently truncated if they do not fit in the default precision and scale. Explicitly specify the SQL server column type that can accommodate all the values in 'OnModelCreating' using 'HasColumnType', specify precision and scale using 'HasPrecision', or configure a value converter using 'HasConversion'.
2025-09-18 11:52:58.325 +08:00 [WRN] No store type was specified for the decimal property 'Amount' on entity type 'PayRecord'. This will cause values to be silently truncated if they do not fit in the default precision and scale. Explicitly specify the SQL server column type that can accommodate all the values in 'OnModelCreating' using 'HasColumnType', specify precision and scale using 'HasPrecision', or configure a value converter using 'HasConversion'.
2025-09-18 11:52:58.325 +08:00 [WRN] No store type was specified for the decimal property 'Proportion' on entity type 'PayTypeProgress'. This will cause values to be silently truncated if they do not fit in the default precision and scale. Explicitly specify the SQL server column type that can accommodate all the values in 'OnModelCreating' using 'HasColumnType', specify precision and scale using 'HasPrecision', or configure a value converter using 'HasConversion'.
2025-09-18 11:52:58.325 +08:00 [WRN] No store type was specified for the decimal property 'Amount' on entity type 'WarrantyPeriod'. This will cause values to be silently truncated if they do not fit in the default precision and scale. Explicitly specify the SQL server column type that can accommodate all the values in 'OnModelCreating' using 'HasColumnType', specify precision and scale using 'HasPrecision', or configure a value converter using 'HasConversion'.
2025-09-18 11:52:58.325 +08:00 [WRN] No store type was specified for the decimal property 'PayedAmount' on entity type 'WarrantyPeriod'. This will cause values to be silently truncated if they do not fit in the default precision and scale. Explicitly specify the SQL server column type that can accommodate all the values in 'OnModelCreating' using 'HasColumnType', specify precision and scale using 'HasPrecision', or configure a value converter using 'HasConversion'.
2025-09-18 11:52:58.325 +08:00 [WRN] No store type was specified for the decimal property 'RemainingAmount' on entity type 'WarrantyPeriod'. This will cause values to be silently truncated if they do not fit in the default precision and scale. Explicitly specify the SQL server column type that can accommodate all the values in 'OnModelCreating' using 'HasColumnType', specify precision and scale using 'HasPrecision', or configure a value converter using 'HasConversion'.
2025-09-18 11:52:59.746 +08:00 [INF] Request starting HTTP/2 GET https://master.aysdlrmyy.com:28443/connect/logout?post_logout_redirect_uri=http%3A%2F%2Fmaster.aysdlrmyy.com%3A28444%2Fsignout-callback-oidc&state=CfDJ8D2ygYFMKaZGvAEpZ3bmx8nlI0RZ1T2yW3STyka3CVCJdWCeCIQ5xjsJN2E27Dbw0Ij7SykGqpfp1HnIY2SxynCmU8n5LBClCDG86__9HwEUjnVPTboCwx4an3s14n0xEcF6GLCZGb3XMNh_PNfWzb4&x-client-SKU=ID_NET9_0&x-client-ver=8.1.0.0 - null null
2025-09-18 11:52:59.747 +08:00 [INF] The request URI matched a server endpoint: "Logout".
2025-09-18 11:52:59.748 +08:00 [INF] The logout request was successfully extracted: {
"post_logout_redirect_uri": "http://master.aysdlrmyy.com:28444/signout-callback-oidc",
"state": "CfDJ8D2ygYFMKaZGvAEpZ3bmx8nlI0RZ1T2yW3STyka3CVCJdWCeCIQ5xjsJN2E27Dbw0Ij7SykGqpfp1HnIY2SxynCmU8n5LBClCDG86__9HwEUjnVPTboCwx4an3s14n0xEcF6GLCZGb3XMNh_PNfWzb4",
"x-client-SKU": "ID_NET9_0",
"x-client-ver": "8.1.0.0"
}.
2025-09-18 11:52:59.751 +08:00 [INF] The logout request was successfully validated.
2025-09-18 11:52:59.751 +08:00 [WRN] No SessionId was found in the token during HandleLogoutRequestContext.
2025-09-18 11:52:59.754 +08:00 [INF] Executing endpoint 'Volo.Abp.OpenIddict.Controllers.LogoutController.GetAsync (Volo.Abp.OpenIddict.AspNetCore)'
2025-09-18 11:52:59.754 +08:00 [INF] Route matched with {action = "Get", controller = "Logout", area = "", page = ""}. Executing controller action with signature System.Threading.Tasks.Task1[Microsoft.AspNetCore.Mvc.IActionResult] GetAsync() on controller Volo.Abp.OpenIddict.Controllers.LogoutController (Volo.Abp.OpenIddict.AspNetCore). 2025-09-18 11:52:59.756 +08:00 [ERR] SessionId is null. It's not possible to revoke the session during sign out. 2025-09-18 11:52:59.756 +08:00 [INF] AuthenticationScheme: Identity.Application signed out. 2025-09-18 11:52:59.757 +08:00 [INF] AuthenticationScheme: Identity.External signed out. 2025-09-18 11:52:59.757 +08:00 [INF] AuthenticationScheme: Identity.TwoFactorUserId signed out. 2025-09-18 11:52:59.757 +08:00 [INF] Executing SignOutResult with authentication schemes (["OpenIddict.Server.AspNetCore"]). 2025-09-18 11:52:59.757 +08:00 [INF] The logout response was successfully returned to 'http://master.aysdlrmyy.com:28444/signout-callback-oidc': { "state": "CfDJ8D2ygYFMKaZGvAEpZ3bmx8nlI0RZ1T2yW3STyka3CVCJdWCeCIQ5xjsJN2E27Dbw0Ij7SykGqpfp1HnIY2SxynCmU8n5LBClCDG86__9HwEUjnVPTboCwx4an3s14n0xEcF6GLCZGb3XMNh_PNfWzb4" }. 2025-09-18 11:52:59.757 +08:00 [INF] Executed action Volo.Abp.OpenIddict.Controllers.LogoutController.GetAsync (Volo.Abp.OpenIddict.AspNetCore) in 3.2291ms 2025-09-18 11:52:59.757 +08:00 [INF] Executed endpoint 'Volo.Abp.OpenIddict.Controllers.LogoutController.GetAsync (Volo.Abp.OpenIddict.AspNetCore)' 2025-09-18 11:52:59.758 +08:00 [INF] Request finished HTTP/2 GET https://master.aysdlrmyy.com:28443/connect/logout?post_logout_redirect_uri=http%3A%2F%2Fmaster.aysdlrmyy.com%3A28444%2Fsignout-callback-oidc&state=CfDJ8D2ygYFMKaZGvAEpZ3bmx8nlI0RZ1T2yW3STyka3CVCJdWCeCIQ5xjsJN2E27Dbw0Ij7SykGqpfp1HnIY2SxynCmU8n5LBClCDG86__9HwEUjnVPTboCwx4an3s14n0xEcF6GLCZGb3XMNh_PNfWzb4&x-client-SKU=ID_NET9_0&x-client-ver=8.1.0.0 - 302 null null 11.5585ms 2025-09-18 11:53:02.544 +08:00 [INF] AuthenticationScheme: Identity.Application signed in. 2025-09-18 11:53:02.573 +08:00 [INF] Executing RedirectResult, redirecting to http://master.aysdlrmyy.com:28444. 2025-09-18 11:53:02.574 +08:00 [INF] Executed action Master9.Custom.PasswordlessController.Login (Master9.AuthServer) in 5220.9766ms 2025-09-18 11:53:02.574 +08:00 [INF] Executed endpoint 'Master9.Custom.PasswordlessController.Login (Master9.AuthServer)' 2025-09-18 11:53:02.596 +08:00 [INF] Request finished HTTP/2 GET https://master.aysdlrmyy.com:28443/Passwordless/Login?userId=admin&token=123 - 302 null null 5256.7679ms 2025-09-18 11:53:07.343 +08:00 [INF] Request starting HTTP/2 GET https://master.aysdlrmyy.com:28443/connect/logout?post_logout_redirect_uri=http%3A%2F%2Fmaster.aysdlrmyy.com%3A28444%2Fsignout-callback-oidc&state=CfDJ8D2ygYFMKaZGvAEpZ3bmx8mXYQRNhVaWzNEccmcV4GBfYq81JmwQk3CM6-nVYKCEh07MTUw98Ky7mnbURVkgRnRxwRxnghylFqkxCQjtlZ0DOTi0t1rRkmzWF6FY2Sb240_s17o-oLDxPqMApS_jNAw&x-client-SKU=ID_NET9_0&x-client-ver=8.1.0.0 - null null 2025-09-18 11:53:07.344 +08:00 [INF] The request URI matched a server endpoint: "Logout". 2025-09-18 11:53:07.344 +08:00 [INF] The logout request was successfully extracted: { "post_logout_redirect_uri": "http://master.aysdlrmyy.com:28444/signout-callback-oidc", "state": "CfDJ8D2ygYFMKaZGvAEpZ3bmx8mXYQRNhVaWzNEccmcV4GBfYq81JmwQk3CM6-nVYKCEh07MTUw98Ky7mnbURVkgRnRxwRxnghylFqkxCQjtlZ0DOTi0t1rRkmzWF6FY2Sb240_s17o-oLDxPqMApS_jNAw", "x-client-SKU": "ID_NET9_0", "x-client-ver": "8.1.0.0" }.