Найти в Дзене

Что нового в ASP.NET Core .NET 7 Preview 5

Оглавление

В обновления .NET 7 Preview 5 вошло много интересных изменений ASP.NET Core. tl;dr:

  • Упрощение конфигурации аутентификации и авторизации на уровне приложения и в конкретных эндпоинтах
  • Упрощение работы с JWT
  • В Minimal APIs можно собирать параметры эндпоинта в тип модели

Облегчение работы с аутентификацией и авторизацией

Настройка аутентификации и авторизации в приложениях ASP.NET Core требует большого количество правок кода — добавления обработки в IServiceCollection, добавление middleware. Конфигурация может иметь много тонких настроек, но для типовых сценариев появились новые упрощенные апи для добавления авторизации в приложениях. Изменения касаются в первую очередь JWT-токенов.

Единая точка настройки аутентификации

В WebApplicationBuilder появилось новое свойство Authentication, котроое служит единой точкой настройки аутентификации, которое предоставляет доступ к AuthenticationBuilder и самостоятельно заботится о добавлении нужных middleware в пайплайн обработки.

Пример приложения с аутентификацией по JWT-токену, где для одного из методов проверяется аутентификация (используется nuget-пакет Microsoft.AspNetCore.Authentication.JwtBearer):

Для задания настроек аутентификации и разделения этих настроек между разными средами используется раздел Authentication в настройках приложениях. Сейчас обновился раздел для настроек JWT-токенов, но к релизу будут добавлены и другие схемы аутентификации. Пример appsettings.Development.json:

-2

Настройка авторизации для отдельных эндпоинтов

В примере выше один из эндпоинтов приложения требовал аутентифицировнного пользователя с помощью метода RequireAuthorization(). Для авторизации обычно используются глобальные настройки Policy с заданием этих политик для эндпоинтов или группы эндпоинтов. Это облегчает переиспользование, но усложняет чтение и управление политиками.

Если требуется задать дополнительную проверку авторизации на конкретный эндпоинт, например, наличия у пользователя определенного claim, то это можно без объявления Policy напрямую:

-3

Утилита для выпуска JWT-токенов в локальном окружении

Если мы попытаемся локально вызвать эндпоинты приложения, защищенные авторизацией, через Postman, curl или dotnet httprepl, то получим ответ сервера 401 Unauthorized:

-4

Нам нужно передать JWT-токен вместе с запросом. На продакшене за выпуск и управление токенами обычно отвечает Security token service (STS). Но для проверки АПИ во время разработки мы можем использовать новую утилиту командной строки dotnet user-jwts для создания и управления токенами.

Новая утилита использует систему пользовательских секретов. В будущих версиях dotnet user-jwts будет автоматически инициализировать подсистему секретов, но в Preview 5 нужно предварительно сделать это самостоятельно с помощью dotnet user-secrets init и dotnet user-secrets list:

-5

После этого мы можем воспользоваться новой утилитой:

-6

Команда create сама обновит файл appsettings.Development.json с помощью необходимых значений конфигурации для схемы аутентификации через JWT для распознавания пользовательских JWT.

После этого можно воспользоваться выпущенным токеном при обращении к методу:

-7

Можно создавать JWT с разными параметрами — кастомными claims, именем и другими настройками:

-8

Биндинг параметров в тип модели для Minimal APIs

Если совсем коротко, то теперь для эндпоинтов с большим числом параметров можно собирать эти параметры в одну модель и получать её на входе обработчика, используя атрибут [AsParameters]:

-9

Правила привязки, которые применялись к параметрам метода, будут применены к свойствам модели или параметрам её конструктора. Можно, как и раньше, явно указывать правила привязки с помощью атрибутов FromRoute, FromQuery, FromServices и других. Например, если мы хотим передавать номер страницы и размер страницы для пагинации через header запроса, то модель будет выглядеть так:

-10

В качестве моделей можно использовать классы, структуры и записи, нельзя использовать абстрактные типы и интерфейсы.