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


Быстрый старт: Использование управляемого Redis в Azure в .NET Core

Это консольное приложение .NET 8 демонстрирует, как подключиться к Управляемому Redis Azure с помощью аутентификации Microsoft Entra ID. Основное предложение — это аутентификация без паролей с автоматическим обновлением токена, обеспечивая безопасный и современный подход к подключению Redis.

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

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

Предпосылки

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

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

Package Цель
Microsoft.Azure.StackExchangeRedis Библиотека расширений, которая добавляет проверку подлинности идентификатора Microsoft Entra в StackExchange.Redis
Azure.Identity Предоставляет DefaultAzureCredential и другие реализации удостоверений Azure
StackExchange.Redis Базовый клиент Redis (подключаемый как зависимость)
Microsoft.Extensions.Logging.Console Логирование на консоли для диагностики

Методы аутентификации

Расширение поддерживает несколько типов удостоверений, каждый из которых имеет соответствующий ConfigureForAzure*() метод расширения:

  1. DefaultAzureCredential — Рекомендуемый подход. Он объединяет несколько источников учетных данных (переменные среды, управляемое удостоверение, проверку подлинности Azure CLI, учетные данные Visual Studio и многое другое) и использует первый, который работает. Это идеально подходит для кода, который выполняется как локально, так и в Azure.

  2. Пользовательски назначенное управляемое удостоверение - Для приложений, размещенных в Azure, где вы явно указываете управляемое удостоверение, которое следует использовать, предоставив его идентификатор клиента.

  3. Управляемое удостоверение, назначенное системой — Для приложений, размещенных в Azure, использующих удостоверение, автоматически назначенное ресурсу.

  4. Принципал службы (секрет) — идентификатор клиента, идентификатор арендатора и секрет для автоматизированных сценариев или сценариев непрерывной интеграции (CI).

  5. Учётная запись службы (сертификат) — идентификатор клиента, идентификатор арендатора и сертификат X.509 для повышения безопасности.

Как DefaultAzureCredential работает локально

При разработке локально, DefaultAzureCredential пытается выполнить аутентификацию с помощью следующих методов:

az login

Данный метод позволяет вам войти в Azure CLI, используя учетную запись Microsoft Entra ID. Пакет SDK обнаруживает кэшированные учетные данные и использует их для получения токенов. Необходимо настроить пользователя Microsoft Entra ID в качестве пользователя Redis в ресурсе Управляемого Redis в Azure с помощью проверки подлинности в меню "Ресурс" на портале Azure.

Ключевые шаблоны реализации

Конфигурация подключения:

ConfigurationOptions configurationOptions = new()
{
    Protocol = RedisProtocol.Resp3,  // Recommended for seamless re-auth
    LoggerFactory = loggerFactory,
    AbortOnConnectFail = true,       // Fail fast (use false in production)
    BacklogPolicy = BacklogPolicy.FailFast
};

Настройка Entra ID:

await configurationOptions.ConfigureForAzureWithTokenCredentialAsync(new DefaultAzureCredential());
var connection = await ConnectionMultiplexer.ConnectAsync(configurationOptions);

Основные операции Redis:

var database = connection.GetDatabase();
await database.StringSetAsync("key", "value");
var value = await database.StringGetAsync("key");

Жизненный цикл токена и автоматическая повторная аутентификация

Расширение автоматически обрабатывает жизненный цикл токена OAuth2:

  1. Начальное приобретение — он получает маркер перед подключением.
  2. Упреждающее обновление — до истечения срока действия маркера (около одного часа) он получает свежий маркер в фоновом режиме.
  3. Повторная проверка подлинности — повторно аутентифицирует соединение с новым токеном без прерывания команд.

Для наблюдаемости можно подписаться на события токена:

Event Цель
TokenRefreshed Новый токен получен
TokenRefreshFailed Сбой обновления токена (всё ещё используется старый токен)
ConnectionReauthenticated Подключение успешно повторно аутентифицировано
ConnectionReauthenticationFailed Сбой повторной проверки подлинности для подключения

RESP3 и протокол RESP2

В примере используется RESP3 (Protocol = RedisProtocol.Resp3так как:

  • RESP2 создает отдельные подключения для интерактивных команд и pub/sub.
  • Только интерактивное подключение проактивно проходит повторную проверку подлинности.
  • Подключения публикация/подписка закрываются при истечении ключа доступа, вызывая кратковременные прерывания.
  • RESP3 мультиплексирует все в одном подключении, избегая этих сбоев.

Предварительные требования Azure

  1. Создайте экземпляр Управляемого Redis в Azure.
  2. Включите проверку подлинности идентификатора Microsoft Entra в разделе "Конфигурация доступа к данным".
  3. Добавьте свое удостоверение как пользователь Redis с соответствующими разрешениями (владелец данных, участник данных и т. д.).
  4. Запустите az login локально для аутентификации с вашей учетной записью Entra ID.

Основные понятия Redis

Понятие Description
ConnectionMultiplexer Одноэлементный пул подключений с потокобезопасной связью с Redis. Создайте его один раз и используйте на протяжении всего времени его существования приложения.
IDatabase Интерфейс для выполнения команд (StringGet, StringSet, HashGetи т. д.).
Формат конечной точки endpoint:10000 (TLS) для Управляемого Redis для Azure.

Запуск примера

az login
cd sample
dotnet run

Введите конечную точку Redis (например, <your-redis-name>.<region>.redis.azure.net:10000), выберите метод проверки подлинности 1 (DefaultAzureCredential), и наблюдайте, как + символы печатаются каждую секунду по мере успешного выполнения команд. Пусть он работает более 60 минут, чтобы удостовериться в работе автоматического обновления токена.

Факторы, учитываемые при производстве

Setting Примерное значение Производственное значение
AbortOnConnectFail true false (повторная попытка при запуске)
BacklogPolicy FailFast Default (команды очереди при транзиторных сбоях)
Время существования подключения Демонстрационный цикл Singleton через DI (IConnectionMultiplexer)

В этом примере представлена полная эталонная реализация для безопасной аутентификации без пароля с использованием Entra ID в любом .NET приложении, которое использует Управляемый Redis в Azure.