Поделиться через


Пример Управляемого Redis в Azure — веб-API ASP.NET Core

В этом примере показано, как подключить веб-API ASP.NET Core к Управляемому Redis в Azure с помощью проверки подлинности идентификатора Microsoft Entra с потоком DefaultAzureCredential . Приложение избегает традиционной аутентификации на основе строк подключения в пользу аутентификации на основе токенов и с использованием идентификатора Microsoft Entra, что соответствует современным рекомендациям по безопасности.

Приложение является минимальным Web API на платформе ASP.NET Core 8.0, которое:

  1. Устанавливает безопасное, прошедшее проверку подлинности подключение к Управляемому Redis в Azure при запуске.
  2. Предоставляет простую конечную точку REST, которая считывает и записывает данные в кэш.
  3. Демонстрирует правильное управление жизненным циклом подключения Redis с помощью внедрения зависимостей.

Переход к коду на GitHub

Клонируйте репозиторий Microsoft.Azure.StackExchangeRedis на GitHub.

Предпосылки

  • Пакет SDK для .NET 8.0.
  • Экземпляр Azure Managed Redis, развернутый в подписке Azure.
  • Пользователь или учётная запись службы Azure должны быть добавлены в кэш в качестве пользователя Redis. На портале Azure в меню "Ресурс" перейдите в раздел "Проверка подлинности, выберите "Пользователь" или "Служебный принципал" и затем добавьте своё удостоверение.
  • Azure CLI для локальной проверки подлинности разработки.

Обязательные пакеты NuGet

Package Цель
Microsoft.Azure.StackExchangeRedis Методы расширения для StackExchange.Redis, которые обеспечивают аутентификацию на основе токенов идентификаторов Microsoft Entra для Управляемого Redis в Azure.
StackExchange.Redis Базовая клиентская библиотека Redis для .NET
Azure.Identity Предоставляет DefaultAzureCredential и другие типы учетных данных для проверки подлинности с помощью служб Azure
Swashbuckle.AspNetCore Поддержка Swagger/OpenAPI для документации и тестирования API

Установите основной пакет:

dotnet add package Microsoft.Azure.StackExchangeRedis

Этот пакет добавляет StackExchange.Redis и Azure.Identity в качестве зависимостей.

Конфигурация

Приложение считывает конечную точку Redis из конфигурации. Обновление appsettings.Development.json:

{
  "Redis": {
    "Endpoint": "<your-redis-name>.<region>.redis.azure.net:10000"
  }
}

Замечание

Управляемый Redis Azure использует порт 10000 по умолчанию. Формат конечной точки: <cache-name>.<region>.redis.azure.net:10000.

Поток проверки подлинности

Локальная разработка

Перед локальной запуском приложения выполните проверку подлинности с помощью Azure:

az login

Эта DefaultAzureCredential автоматически получает учетные данные Azure CLI и использует их для получения токена доступа для ресурса Redis. Такой подход устраняет необходимость локального управления секретами или смены секретов.

Рабочие среды

В средах, размещенных в Azure, таких как служба приложений, приложения контейнеров и AKS, DefaultAzureCredential используется:

  • Управляемое удостоверение — назначаемое системой или назначаемое пользователем
  • Workload Identity — для сценариев Kubernetes
  • Переменные среды — для проверки подлинности учетной записи службы

Вам не нужно изменять код. То же DefaultAzureCredential бесшовно адаптируется к среде.

Architecture

Служба Redis (Services/Redis.cs)

Класс Redis управляет жизненным циклом подключения:

var options = new ConfigurationOptions()
{
    EndPoints = { endpoint },
    LoggerFactory = _loggerFactory,
};

await options.ConfigureForAzureWithTokenCredentialAsync(new DefaultAzureCredential());

_connection = await ConnectionMultiplexer.ConnectAsync(options);

Основные моменты:

  • ConfigureForAzureWithTokenCredentialAsync — это метод расширения из Microsoft.Azure.StackExchangeRedis, который настраивает аутентификацию на основе токенов.
  • DefaultAzureCredential автоматически обрабатывает получение и обновление токенов
  • Приложение устанавливает подключение сразу при запуске и использует его для всех запросов.

Внедрение зависимостей (Program.cs)

Приложение регистрирует службу Redis как синглтон и инициализирует ее во время запуска.

builder.Services.AddSingleton<Redis>();

// Initialize Redis connection
using (var scope = app.Services.CreateScope())
{
    var redis = scope.ServiceProvider.GetRequiredService<Redis>();
    var endpoint = app.Configuration.GetValue<string>("Redis:Endpoint");
    await redis.ConnectAsync(endpoint);
}

Контроллер API (Controllers/SampleController.cs)

Контроллер внедряет Redis службу и демонстрирует основные операции кэша:

  • GET /Sample: считывает метку времени посещения из кэша и обновляет ее с текущим временем.

Запуск приложения

  1. Убедитесь, что вы прошли проверку подлинности:

    az login
    
  2. Обновите конечную точку Redis в appsettings.Development.json.

  3. Запустите приложение:

    dotnet run
    
  4. Перейдите к https://localhost:<port>/swagger, чтобы получить доступ к пользовательскому интерфейсу Swagger.

Ожидаемые выходные данные

При вызове конечной GET /Sample точки:

Первый запрос:

Previous visit was at: 
(Empty value since no previous visit exists)
**Subsequent requests:**
Previous visit was at: 2026-01-30T14:23:45
(Returns the ISO 8601 formatted timestamp of the previous request)

Отображаются журналы консоли:

info: Microsoft.Azure.StackExchangeRedis.Sample.AspNet.Controllers.SampleController
      Handled GET request. Previous visit time: 2026-01-30T14:23:45

Основные детали реализации

  • Обновление маркера. Библиотека Microsoft.Azure.StackExchangeRedis автоматически обновляет маркеры до истечения срока их действия, поэтому вам не нужно обрабатывать обновление вручную.

  • Устойчивость подключений: StackExchange.Redis самостоятельно управляет логикой повторного подключения.

  • Очистка ресурсов. Redis Служба реализует IDisposable правильное закрытие подключения при завершении работы приложения.

  • Интеграция логирования: клиент Redis работает с .NET для обеспечения единого ведения журнала.

Устранение неполадок

Проблема Резолюция
No connection is available Проверьте формат конечной точки и порт (10000). Убедитесь, что экземпляр Redis предоставлен и доступен.
AuthenticationFailedException Запустите az login для обновления учетных данных. Убедитесь, что ваша учетная запись добавлена в качестве пользователя Redis в разделе "Проверка подлинности" меню "Ресурсы".
Unauthorized Убедитесь, что идентификатор Microsoft Entra ID добавлен в качестве пользователя Redis в управляемом экземпляре Redis Azure. Дополнительные сведения см. в разделе "Использование идентификатора Microsoft Entra для проверки подлинности кэша".