JWT认证成功后无法通过HttpContext访问User的问题求助
问题:无法通过HttpContext访问已认证用户的User信息
我通过生成JWT令牌并发送给客户端实现用户认证,客户端将该令牌返回给API后可成功完成登录流程,但无法通过HttpContext访问User。已确认令牌功能正常,手动修改客户端访问令牌会触发会话登出。
Program.cs文件内容如下:
var builder = WebApplication.CreateBuilder(args); builder.Services.AddHttpContextAccessor(); builder.Services.AddPersistenceServices(); builder.Services.AddInfrastructureServices(); builder.Services.AddApplicationServices(); builder.Services.AddSignalRServices(); //builder.Services.AddStorage<LocalStorage>(); builder.Services.AddStorage<AzureStorage>(); builder.Services.AddCors(options => options.AddDefaultPolicy(policy => policy.WithOrigins("http://localhost:4200", "https://localhost:4200").AllowAnyHeader().AllowAnyMethod().AllowCredentials())); builder.Services.AddHttpLogging(logging => { logging.LoggingFields = HttpLoggingFields.All; logging.RequestHeaders.Add("sec-ch-ua"); logging.MediaTypeOptions.AddText("application/javascript"); logging.RequestBodyLogLimit = 4096; logging.ResponseBodyLogLimit = 4096; logging.CombineLogs = true; }); builder.Services.AddControllers(options => { options.Filters.Add<ValidationFilter>(); }) .AddFluentValidation(configuration => configuration.RegisterValidatorsFromAssemblyContaining<CreateProductValidator>()) .ConfigureApiBehaviorOptions(options => options.SuppressModelStateInvalidFilter = true); builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(); builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme) .AddJwtBearer("Admin", options => { options.TokenValidationParameters = new() { ValidateAudience = true, ValidateIssuer = true, ValidateLifetime = true, ValidateIssuerSigningKey = true, ValidAudience = builder.Configuration["Token:Audience"], ValidIssuer = builder.Configuration["Token:Issuer"], IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(builder.Configuration["Token:SecurityKey"])), LifetimeValidator = (notBefore, expires, securityToken, validationParameters) => expires != null ? expires > DateTime.UtcNow : false, NameClaimType = ClaimTypes.Name }; }); var app = builder.Build(); if (app.Environment.IsDevelopment()) { app.UseSwagger(); app.UseSwaggerUI(); } app.ConfigureExceptionHandler<Program>(app.Services.GetRequiredService<ILogger<Program>>()); app.UseStaticFiles(); app.UseHttpsRedirection(); app.UseSerilogRequestLogging(); app.UseHttpLogging(); app.UseCors(); app.UseAuthentication(); app.UseAuthorization(); app.Use(async (context, next) => { var username = context.User?.Identity?.IsAuthenticated == true ? context.User.Identity.Name : null; LogContext.PushProperty("user_name", username); await next(); }); app.MapControllers(); app.MapHubs(); app.Run();
内容的提问来源于stack exchange,提问作者İsmail Dağhan
相关产品推荐
相关产品推荐

