Пользователь не аутентифицирован после перехода на .NET 8.C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Пользователь не аутентифицирован после перехода на .NET 8.

Сообщение Anonymous »

Я перенес свой 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 = 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»