Токен JWT платформы идентификации не проверяется в промежуточном программном обеспечении: HttpContext.User пуст, а IsAutC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Токен JWT платформы идентификации не проверяется в промежуточном программном обеспечении: HttpContext.User пуст, а IsAut

Сообщение Anonymous »

Я реализую аутентификацию JWT в своем приложении ASP.NET Core. Токен успешно сгенерирован, и я вижу его в заголовке авторизации запросов. Однако когда я пытаюсь получить доступ к HttpContext.User в пользовательском промежуточном программном обеспечении, у пользователя нет претензий, а IsAuthenticated всегда имеет значение false.
Вот моя настройка - Генерация токена JWT:

Код: Выделить всё

public async Task GenerateJWTTokenAsync(AppUser user)
{
var claims = new List
{
new Claim(ClaimTypes.NameIdentifier, user.Id.ToString()),
new Claim(ClaimTypes.Name, user.UserName.ToString())
};

if (user.IsSuperAdmin)
{
claims.Add(new Claim("isSuperAdmin", "true"));
}

var signingKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(configuration["Jwt:SecretKey"]));
var token = new JwtSecurityToken(
issuer: configuration["Jwt:Issuer"],
audience: configuration["Jwt:Audience"],
claims: claims,
expires: DateTime.UtcNow.AddMinutes(15),
signingCredentials: new SigningCredentials(signingKey, SecurityAlgorithms.HmacSha256)
);

return new JwtSecurityTokenHandler().WriteToken(token);
}
Конфигурация JWT в Program.cs:

Код: Выделить всё

builder.Services.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddJwtBearer(options =>
{
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = true,
ValidateAudience = true,
ValidateLifetime = true,
ValidateIssuerSigningKey = true,
ValidIssuer = builder.Configuration["Jwt:Issuer"],
ValidAudience = builder.Configuration["Jwt:Audience"],
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(builder.Configuration["Jwt:SecretKey"])),
ClockSkew = TimeSpan.Zero
};
});
Пользовательское промежуточное ПО:

Код: Выделить всё

public async Task InvokeAsync(HttpContext context)
{
if (context.Request.Headers.TryGetValue("Authorization", out var token))
{
Console.WriteLine($"Token: {token}");
}

if (context.User.Identity.IsAuthenticated)
{
Console.WriteLine($"User Authenticated: {context.User.Identity.Name}");
}
else
{
Console.WriteLine("User is not authenticated");
}

await _next(context);
}
Проблема
  • Я получаю токен в заголовке авторизации< /li>
    Несмотря на это, HttpContext.User пуст, а IsAuthenticated всегда имеет значение false.
Что я пробовал
  • Проверил порядок промежуточного программного обеспечения (

    Код: Выделить всё

    UseAuthentication
    и UseAuthorization предшествуют моему пользовательскому промежуточному программному обеспечению)
  • Проверил формат заголовка авторизации ()
  • Включено подробное ведение журнала для JwtBearerMiddleware, но ошибки не регистрируются.
  • Токен проверен вручную с помощью JwtSecurityTokenHandler.ReadJwtToken. () в промежуточном программном обеспечении, и кажется действительным
  • Гарантированные параметры TokenValidationParameters соответствуют свойства токена (Эмитент, Аудитория, SecretKey и т. д.)


Подробнее здесь: https://stackoverflow.com/questions/792 ... -user-is-e
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

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

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