Пользователь не аутентифицирован после перехода на .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 = правда; 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(токен);
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

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

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