Я перенес свой API с .NET 5 на .NET 8. Моя проблема: HttpContext.User.IsAuthenticated = false даже после того, как я передаю JwtToken в заголовке.
Вот моя конфигурация JWT в StartUp.cs (этот код отлично работал в .NET 5):
services.AddAuthentication(x => { x.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme; x.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme; }) .AddJwtBearer(jwtBearerOptions => { jwtBearerOptions.RequireHttpsMetadata = false; jwtBearerOptions.SaveToken = правда; jwtBearerOptions.TokenValidationParameters = новые параметры TokenValidationParameters { ClockSkew = новый TimeSpan(0), ValidateIssuer = правда, ВалидатеАктор = правда, Валидатаудиенс = правда, ValidateLifetime = правда, ValidateIssuerSigningKey = true, ValidIssuer = jwtSettings.Issuer, ValidAudience = jwtSettings.Audience, IssuerSigningKey = новый SymmetricSecurityKey(Encoding.UTF8.GetBytes(jwtSettings.Key)) }; jwtBearerOptions.EventsType = typeof(JwtTokenValidatedEvent); }); Здесь я использовал EventsTypes, где я вношу изменения в объект Claim. Для иллюстрации посмотрите эти скриншоты:


EDITED (Код для создания токена JWT)
JwtSecurityTokenHandler tokenHandler = new(); ключ byte[] = Encoding.ASCII.GetBytes(_jwtSettings.Key); List претензии = new() { новое утверждение (System.Security.Claims.ClaimTypes.NameIdentifier, user.UserId.ToString()), новый Claim("companyid", Convert.ToString(user.CompanyId)), новый Claim("usertypeid", Convert.ToString(user.UserTypeId)), новый Claim("companyfacilityid", Convert.ToString(user.CompanyFacilityId)), новый Claim («часовой пояс», предпочтительныйTimeZone) }; претензии.AddRange(roles.Select(r => new Claim(Library.Common.UserRoleClaim, r)).ToList()); SecurityTokenDescriptor tokenDescriptor = новый() { Аудитория = _jwtSettings.Аудитория, Эмитент = _jwtSettings.Issuer, Тема = новый ClaimsIdentity(заявления), Срок действия истекает = DateTime.UtcNow.AddMinutes(_jwtSettings.JWTTokenValidityMinutes), SigningCredentials = новые SigningCredentials (новый SymmetricSecurityKey (ключ), SecurityAlgorithms.HmacSha256Signature) }; Токен SecurityToken = tokenHandler.CreateToken(tokenDescriptor); вернуть tokenHandler.WriteToken(токен);