Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Это консольное приложение .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*() метод расширения:
DefaultAzureCredential— Рекомендуемый подход. Он объединяет несколько источников учетных данных (переменные среды, управляемое удостоверение, проверку подлинности Azure CLI, учетные данные Visual Studio и многое другое) и использует первый, который работает. Это идеально подходит для кода, который выполняется как локально, так и в Azure.Пользовательски назначенное управляемое удостоверение - Для приложений, размещенных в Azure, где вы явно указываете управляемое удостоверение, которое следует использовать, предоставив его идентификатор клиента.
Управляемое удостоверение, назначенное системой — Для приложений, размещенных в Azure, использующих удостоверение, автоматически назначенное ресурсу.
Принципал службы (секрет) — идентификатор клиента, идентификатор арендатора и секрет для автоматизированных сценариев или сценариев непрерывной интеграции (CI).
Учётная запись службы (сертификат) — идентификатор клиента, идентификатор арендатора и сертификат 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:
- Начальное приобретение — он получает маркер перед подключением.
- Упреждающее обновление — до истечения срока действия маркера (около одного часа) он получает свежий маркер в фоновом режиме.
- Повторная проверка подлинности — повторно аутентифицирует соединение с новым токеном без прерывания команд.
Для наблюдаемости можно подписаться на события токена:
| Event | Цель |
|---|---|
TokenRefreshed |
Новый токен получен |
TokenRefreshFailed |
Сбой обновления токена (всё ещё используется старый токен) |
ConnectionReauthenticated |
Подключение успешно повторно аутентифицировано |
ConnectionReauthenticationFailed |
Сбой повторной проверки подлинности для подключения |
RESP3 и протокол RESP2
В примере используется RESP3 (Protocol = RedisProtocol.Resp3так как:
- RESP2 создает отдельные подключения для интерактивных команд и pub/sub.
- Только интерактивное подключение проактивно проходит повторную проверку подлинности.
- Подключения публикация/подписка закрываются при истечении ключа доступа, вызывая кратковременные прерывания.
- RESP3 мультиплексирует все в одном подключении, избегая этих сбоев.
Предварительные требования Azure
- Создайте экземпляр Управляемого Redis в Azure.
- Включите проверку подлинности идентификатора Microsoft Entra в разделе "Конфигурация доступа к данным".
- Добавьте свое удостоверение как пользователь Redis с соответствующими разрешениями (владелец данных, участник данных и т. д.).
-
Запустите
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.