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


ОТРЕДАКТИРОВАНО (Код для создания токена JWT)
JwtSecurityTokenHandler tokenHandler = new();
byte[] key = Encoding.ASCII.GetBytes(_jwtSettings.Key);
List claims = new()
{
new Claim(System.Security.Claims.ClaimTypes.NameIdentifier, user.UserId.ToString()),
new Claim("companyid", Convert.ToString(user.CompanyId)),
new Claim("usertypeid", Convert.ToString(user.UserTypeId)),
new Claim("companyfacilityid", Convert.ToString(user.CompanyFacilityId)),
new Claim("timezone", preferedTimeZone)
};
claims.AddRange(roles.Select(r => new Claim(Library.Common.UserRoleClaim, r)).ToList());
SecurityTokenDescriptor tokenDescriptor = new()
{
Audience = _jwtSettings.Audience,
Issuer = _jwtSettings.Issuer,
Subject = new ClaimsIdentity(claims),
Expires = DateTime.UtcNow.AddMinutes(_jwtSettings.JWTTokenValidityMinutes),
SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha256Signature)
};
SecurityToken token = tokenHandler.CreateToken(tokenDescriptor);
return tokenHandler.WriteToken(token);
Подробнее здесь: https://stackoverflow.com/questions/777 ... n-to-net-8