Как я могу получить информацию о пользователе из токена JWT в ASP.NET Core 8?

Я пишу клиент-серверное приложение с авторизацией JWT в ASP.NET Core 8.

Конечные точки API авторизации реализованы с использованием метода расширения, добавленного в .NET 8.

Проблема в следующем: мне нужно получить информацию о пользователе из тела токена JWT в моем приложении SPA, но конечные точки, добавленныеAddIdentityApiвозвращаются ответы с зашифрованными (сжатыми?) токенами - эти токены не имеют точек в качестве разделителя.

Пример ответа на вход:

      {
  "tokenType": "Bearer",
  "accessToken": "CfDJ8GwmsrOCkNBF ... ",    <-- long string without dots
  "expiresIn": 3600,
  "refreshToken": "..."
}

Раньше я использовал токены JWT в ASP.NET, и они были читаемы.

Я не смог найти уровень в системе аутентификации, который выполняет такое шифрование, и не понимаю, почему он зашифрован. HttpContext.Userавторизованных запросов содержит всю необходимую мне информацию.

МойProgram.cs:

      using ICollector.Server.Data;
using ICollector.Server.Models;
using Microsoft.EntityFrameworkCore;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddDbContext<AppIdentityDbContext>(options =>
    options.UseSqlServer(builder.Configuration.GetConnectionString("mssql")
        ?? throw new InvalidOperationException("Connection string not found.")));

builder.Services.AddIdentityApiEndpoints<AppUser>()
    .AddEntityFrameworkStores<AppIdentityDbContext>();

builder.Services.AddAuthorization();

builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();

var app = builder.Build();

app.UseHttpsRedirection();

if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI();
}

app.UseDefaultFiles();
app.UseStaticFiles();

app.UseRouting();

app.UseAuthentication();
app.UseAuthorization();

app.MapGroup("/api/identity").MapIdentityApi<AppUser>();

app.MapFallbackToFile("/index.html");

app.Run();

Я прочитал эту статью Эндрю Локка, где он описал новый функционал, но не нашел там никаких пояснений по поводу формата токена.

Копаясь в коде фреймворка, я нашел статический классJwtTokenUtilities, который имеет методDecompressToken(byte[] tokenBytes, string algorithm), из чего могу сделать вывод, что сжатие можно выполнить, но сделано ли это в моей конфигурации и в чем алгоритм я так и не понял.

0 ответов

Другие вопросы по тегам