Проверка подлинности и авторизация в минимальных API

Примечание.

Это не последняя версия этой статьи. В текущей версии см. версию .NET 10 этой статьи.

Предупреждение

Эта версия ASP.NET Core больше не поддерживается. Дополнительные сведения см. в политике поддержки .NET и .NET Core. В текущей версии см. версию .NET 10 этой статьи.

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

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

Обзор концепций проверки подлинности и авторизации

Проверка подлинности — это процесс определения удостоверения пользователя во время авторизации— это процесс определения того, имеет ли пользователь доступ к ресурсу. Сценарии проверки подлинности и авторизации совместно используют аналогичную семантику реализации в ASP.NET Core.

  • Служба проверки подлинности IAuthenticationService обрабатывает всю аутентификацию и используется программным посредником.
  • Служба авторизации, IAuthorizationService, руководит всеми процессами авторизации и используется промежуточным программным обеспечением авторизации.

Служба проверки подлинности

Служба проверки подлинности использует зарегистрированные обработчики для выполнения связанных с проверкой подлинности действий. Например, действие, связанное с аутентификацией, это аутентификация пользователя или выход из системы. Схемы проверки подлинности — это имена, которые используются для уникальной идентификации обработчика проверки подлинности и его параметров конфигурации. Обработчики проверки подлинности отвечают за реализацию стратегий проверки подлинности и создание утверждений пользователя с учетом определенной стратегии проверки подлинности, например OAuth или OIDC. Параметры конфигурации уникальны для стратегии и одновременно предоставляют обработчику настройки, влияющие на процесс аутентификации, такие как URI перенаправления.

Служба авторизации

На уровне авторизации существует две стратегии определения доступа пользователей к ресурсам:

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

Включение проверки подлинности в минимальных приложениях

Чтобы включить проверку подлинности, вызовите метод AddAuthentication , чтобы зарегистрировать необходимые службы проверки подлинности в поставщике служб приложения.

var builder = WebApplication.CreateBuilder(args);
builder.Services.AddAuthentication();
var app = builder.Build();

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

Как правило, используется определенная стратегия проверки подлинности. В следующем примере приложение настроено с поддержкой проверки подлинности на основе веб-маркера JSON (JWT). В этом примере используются API,доступные в Microsoft. AspNetCore.Authentication.JwtBearer пакет NuGet.

var builder = WebApplication.CreateBuilder(args);
// Requires Microsoft.AspNetCore.Authentication.JwtBearer
builder.Services.AddAuthentication().AddJwtBearer();
var app = builder.Build();

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

По умолчанию WebApplication автоматически регистрирует ПО промежуточного слоя проверки подлинности и авторизации, если включены определенные службы проверки подлинности и авторизации. В следующем примере не требуется вызывать методы UseAuthentication или UseAuthorization для регистрации ПО промежуточного слоя. WebApplication автоматически завершает регистрацию после вызова AddAuthentication метода или AddAuthorization метода.

var builder = WebApplication.CreateBuilder(args);
builder.Services.AddAuthentication().AddJwtBearer();
builder.Services.AddAuthorization();
var app = builder.Build();

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

В некоторых случаях, например, при управлении порядком промежуточного слоя, необходимо явно зарегистрировать аутентификацию и авторизацию. В следующем примере ПО промежуточного слоя проверки подлинности выполняется после запуска ПО промежуточного слоя CORS. Дополнительные сведения о промежуточном ПО и этом автоматическом поведении см. в разделе "Промежуточное ПО в приложениях минимального API".

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddCors();
builder.Services.AddAuthentication().AddJwtBearer();
builder.Services.AddAuthorization();

var app = builder.Build();

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

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

Настройка стратегии проверки подлинности

Стратегии проверки подлинности обычно поддерживают различные конфигурации, загруженные с помощью опций. Минимальные приложения поддерживают параметры загрузки из конфигурации для следующих стратегий проверки подлинности:

Платформа ASP.NET Core ожидает найти эти параметры в разделе Authentication:Schemes:{SchemeName} в разделе configuration. В следующем примере две разные схемы Bearer и LocalAuthIssuerопределяются соответствующими параметрами. Этот Authentication:DefaultScheme параметр можно использовать для настройки стратегии проверки подлинности по умолчанию.

{
  "Authentication": {
    "DefaultScheme":  "LocalAuthIssuer",
    "Schemes": {
      "Bearer": {
        "ValidAudiences": [
          "https://localhost:7259",
          "http://localhost:5259"
        ],
        "ValidIssuer": "dotnet-user-jwts"
      },
      "LocalAuthIssuer": {
        "ValidAudiences": [
          "https://localhost:7259",
          "http://localhost:5259"
        ],
        "ValidIssuer": "local-auth"
      }
    }
  }
}

В файле Program.cs две стратегии проверки подлинности на основе носителя JWT регистрируются со следующими именами схем:

  • Несущий
  • LocalAuthIssuer

Bearer — это типичная схема по умолчанию в приложениях на основе носителя JWT. Однако можно переопределить схему по умолчанию, задав DefaultScheme свойство, как показано в предыдущем примере.

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

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddAuthentication()
  .AddJwtBearer()
  .AddJwtBearer("LocalAuthIssuer");
  
var app = builder.Build();

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

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

Проверка подлинности определяет и проверяет удостоверение пользователей в API. Авторизация подтверждает и верифицирует доступ к ресурсам в API. IAuthorizationService Служба, зарегистрированная методом AddAuthorization расширения, упрощает авторизацию. В следующем сценарии добавляется ресурс /hello, который требует от пользователя представить подтверждение роли admin с подтверждением области greetings_api.

Настройка требований авторизации к ресурсу — это двухэтапный процесс.

  1. Определите требования авторизации в политике глобально.
  2. Применение отдельных политик к ресурсам.

В следующем коде вызывается метод AddAuthorizationBuilder, который:

  • Добавляет службы, связанные с авторизацией, в контейнер DI.
  • Возвращает объект, который можно использовать для прямой регистрации политик авторизации.

Код создает новую политику авторизации с именем admin_greetings , которая инкапсулирует два требования авторизации:

  • Требование на основе ролей для пользователей с ролью admin через RequireRole.
  • Требование, основанное на утверждениях с помощью RequireClaim, для которого пользователь должен предоставить greetings_api утверждение области.

Политика admin_greetings предоставляется как обязательная политика для конечной точки /hello.

using Microsoft.Identity.Web;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddAuthorizationBuilder()
  .AddPolicy("admin_greetings", policy =>
        policy
            .RequireRole("admin")
            .RequireClaim("scope", "greetings_api"));

var app = builder.Build();

app.MapGet("/hello", () => "Hello world!")
  .RequireAuthorization("admin_greetings");

app.Run();

Использование dotnet user-jwts для тестирования разработки

В примерах этой статьи используется приложение, настроенное с проверкой подлинности на основе носителя JWT. Проверка подлинности на основе носителя JWT требует от клиентов представить маркер в заголовке запроса, который используется для проверки их удостоверения и утверждений. Как правило, центральный орган, такой как сервер удостоверений, выдает токены.

Для разработки на локальном компьютере средство командной строки dotnet user-jwts можно использовать для создания маркеров носителя.

dotnet user-jwts create

Примечание.

При вызове проекта средство автоматически добавляет параметры проверки подлинности, соответствующие созданному маркеру в файл appsettings.json .

Маркеры можно настроить с различными настройками. Например, чтобы создать токен для admin роли и greetings_api области, ожидаемых политикой авторизации в приведенном выше коде, запустите средство следующим образом:

dotnet user-jwts create --scope "greetings_api" --role "admin"

Затем созданный маркер можно отправить как часть заголовка в выбранном средстве тестирования. Например, чтобы отправить токен с помощью curl:

curl -i -H "Authorization: Bearer {token}" https://localhost:{port}/hello