Обложка канала

.NET Разработчик

Опытный разработчик не так давно зашёл в .Net и поставил цель получить сертификат Microsoft. Свой ежедневный прогресс он описывает на канале .Net Разработчик. Заметки об изученном материале, советы по повышению производительности и поддержке мотивации, ин

.NET Разработчик

4 года назад
Открыть в
День 1386. #ЧтоНовенького Утилита для Создания Токенов JWT на Время Разработки Допустим, вы создаёте защищённый API. Для аутентификации/авторизации используются JWT. Нужно убедиться, что API отклоняет неправильные или поддельные токены и разрешает доступ с правильными. Можно написать собственный код для генерации токенов JWT или можно зарегистрировать клиентов с нужными параметрами в Identity Server, если он у нас есть. Однако в .NET 7 появился инструмент dotnet user-jwts. Он помогает создавать и управлять JWT во время разработки для проекта, который мы создаём. Создадим простой API:
using System.Security.Claims;

var builder = WebApplication.CreateBuilder(args);
builder.Services.AddAuthorization();
builder.Services
 .AddAuthentication("Bearer")
 .AddJwtBearer();

var app = builder.Build();

app.MapGet("/", () => "Hello, World!");
app.MapGet("/secret",
  (ClaimsPrincipal user) => 
    $"Hello {user.Identity?.Name}!")
 .RequireAuthorization();

app.Run();

В нашем API 2 конечные точки: - открытая в корне, которая выдаёт строку "Hello, World!"; - закрытая /secret, выдающая приветствие авторизованному пользователю. Теперь добавим возможность использовать локальные JWT токены.
dotnet user-jwts create

Эта команда создаст токен для текущего пользователя компьютера, а также добавит в файл appsettings.Development.json блок "Authentication" с необходимыми настройками для использования Bearer-аутентификации. Мы можем задавать различные параметры для JWT токена, например, имя пользователя, список клеймов и разрешений (полная документация команды):
dotnet user-jwts create --name MyTestUser --scope "myapi:secrets"

Эта команда создаст пользователя с именем MytestUser и разрешением для "myapi:secrets". Вывод будет примерно такой:
New JWT saved with ID 'd0f7fe96'.
Name: MyTestUser
Scopes: myapi:secrets

Token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVC…

Вот и всё. Теперь мы можем использовать любой REST-клиент, вроде Postman, для доступа к закрытой конечной точке. Скопируйте значение Token, выданное утилитой user-jwts. В Postman создайте Get запрос к https://localhost:7107/secret. На вкладке Authorization выберите Type: Bearer Token и вставьте значение токена в поле. Выполните запрос. Он должен выдать код ответа HTTP 200 и ответ:
Hello MyTestUser!

Источник: https://learn.microsoft.com/en-us/aspnet/core/security/authentication/jwt-authn