Аутентификация и авторизация в ASP.NET Core. Основные понятия

Тема аутентификации и авторизации в ASP.NET Core довольно обширная и сложная, поэтому, чтобы в итоге не запутаться в том что, как и зачем мы делаем, вначале разберемся с основными моментами аутентификации и авторизации пользователей в ASP.NET Core, а, затем попробуем разработать свою систему проверки пользователей с нуля, используя пустой шаблон проекта ASP.NET Core.

Основные моменты аутентификации и авторизации пользователей в ASP.NET Core

Аутентификация (проверка подлинности) — это процесс установления личности пользователя. То есть аутентификация — это процесс, в результате которого мы получаем ответ на вопрос «Кто осуществляет вход в систему?» После того, как пользователь проходит аутентификацию и пробует получить доступ к ресурсу, запускается следующий процесс — авторизация.

Авторизация — это процесс определения, есть ли у пользователя доступ к ресурсу. Пользователь может быть аутентифицирован (определен), но, например, не может просматривать раздел с маркировкой «18+» так как его возраст менее 18 лет.

В ASP.NET Core оба этих процесса реализуются по схожей семантике и тесно связаны между собой. Так, аутентификация пользователя осуществляется сервисом IAuthenticationService, который используется специальным компонентом middleware. В свою очередь, для авторизации пользователя используется сервис IAuthorizationService, который также используется компонентом middleware.

Следующий момент — выбор схемы аутентификации пользователя. Схема аутентификации — это, по сути, определенная строка, по которой ASP.NET Core определяет конкретные обработчики аутентификации, т.е. отдельные классы, методы и т.д., которые реализуют процесс аутентификации (обычно, это классы, реализующие интерфейс  IAuthenticationHandler). Наиболее часто используемые схемы аутентификации — это

  • аутентификация на основе JWT-токенов (название схемы «Bearer»)
  • аутентификация на основе куки (название схемы «Cookies»)

Включение аутентификации пользователя в ASP.NET Core

Итак, для включения аутентификации пользователя в ASP.NET Core мы должны выполнить три действия:

  1. Добавить в проект сервис аутентификации
  2. Определить схему аутентификации
  3. Определить обработчик аутентификации

Реализуем все эти три шага на примере аутентификации с использованием JWT-токенов, используя пустой шаблон проекта ASP.NET Core. Создадим новый проект ASP.NET Core и добавим в него следующие строки:

public class Program
{
    public static void Main(string[] args)
    {
        var builder = WebApplication.CreateBuilder(args);

        builder.Services.AddAuthentication("Bearer") //подключили сервис аутентификации и указали схему
                        .AddJwtBearer(); //добавляем обработчик аутентификации, который получает токен из заголовоков запроса

        var app = builder.Build();

        app.UseAuthentication(); //добавляем компонент middleware для аутентификации

        app.MapGet("/", () => "Hello World!");
       

        app.Run();
    }
}

Здесь мы подключили сервис аутентификации пользователя на основе JWT-токенов и подключили в конвейер обработки запросов компонент middleware, который будет использовать сервис аутентификации. Если мы сейчас запустим приложение, то ничего нового для нас не произойдет — приложение также запустится и выведет заветную строку «Hello World!» в браузере так как в данный момент мы всего лишь сделали минимальные настройки аутентификации и никак не задействуем этот процесс в проекте — все пользователи, в том числе и не аутентифицированные имеют равный доступ к единственному ресурсу приложения — главной странице.

Чтобы ограничить доступ не аутентифицированным пользователям к какому-либо ресурсу мы должны включить в конвейер обработки запроса второй компонент middleware — авторизацию.

Включение авторизации пользователей в ASP.NET Core

Как было сказано выше — семантика для аутентификации и авторизации схожа. Мы должны подключить сервис авторизации и задействовать компонент middleaware:

public class Program
{
    public static void Main(string[] args)
    {
        var builder = WebApplication.CreateBuilder(args);

        builder.Services.AddAuthentication("Bearer") 
            .AddJwtBearer();

        builder.Services.AddAuthorization(); //подключили сервис авторизации

        var app = builder.Build();

        app.UseAuthentication();
        app.UseAuthorization(); //подключили компонент middleware авторизации

        app.MapGet("/", () => "Hello World!");
       

        app.Run();
    }
}

Теперь создадим новую конечную точку, которая будет доступна только авторизованным пользователям. Здесь мы можем использовать два варианта:

ограничение доступа с помощью атрибута [Authorize]

app.MapGet("/auth", [Authorize]() => "Hello World!");

Атрибут [Authorize] позволяет ограничить доступ к какому-либо ресурсу не авторизованным пользователям. Аналогичное ограничение на маршрут мы можем включить с помощью метода расширения RequireAuthorization следующим образом:

app.MapGet("/auth", () => "Hello World!").RequireAuthorization();

Теперь можем посмотреть на работу приложения. Доступ к главной странице приложения открыт всем:

Попытка доступа к «/auth» будет пресечена:

Итого

В этой части мы, в общих чертах, познакомились с процессами аутентификации и авторизации пользователей в ASP.NET Core и настроили аутентификацию и авторизацию в проекте. В следующей части мы продолжим разрабатывать наше приложение и посмотрим как реализовать весь процесс аутентификации пользователя, используя одну из схем.

Подписаться
Уведомить о
guest
0 Комментарий
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии