Partilhar via


Início rápido: Usar o Azure Managed Redis no .NET Core

Esta aplicação de consola .NET 8 demonstra como se ligar ao Azure Managed Redis usando a autenticação Microsoft Entra ID . A proposta de valor central é a autenticação sem palavra-passe com atualização automática de tokens, proporcionando uma abordagem segura e moderna à conectividade Redis.

Saltar para o código no GitHub

Clone o repositório Microsoft.Azure.StackExchangeRedis no GitHub.

Pré-requisitos

  • SDK do .NET 8.0.
  • Uma instância Azure Managed Redis provisionada na sua subscrição Azure.
  • O seu utilizador ou principal de serviço Azure deve ser adicionado como utilizador Redis na cache. No portal Azure, vá a Autenticação no menu de Recursos, selecione Utilizador ou principal de serviço e adicione a sua identidade.
  • Azure CLI para autenticação para desenvolvimento local.

Pacotes NuGet Obrigatórios

Package Propósito
Microsoft.Azure.StackExchangeRedis Biblioteca de extensões que adiciona autenticação Microsoft Entra ID ao StackExchange.Redis
Azure.Identity Fornece DefaultAzureCredential e outras implementações de identidade do Azure
StackExchange.Redis O cliente Redis subjacente (incluído como uma dependência)
Microsoft.Extensions.Logging.Console Registo de consola para diagnósticos

Métodos de autenticação

A extensão suporta múltiplos tipos de identidade, cada um com um método de extensão correspondente ConfigureForAzure*() :

  1. DefaultAzureCredential - A abordagem recomendada. Cadeia múltiplas fontes de credenciais (variáveis de ambiente, identidade gerida, autenticação Azure CLI, credenciais Visual Studio e mais) e usa a primeira que funciona. É ideal para código que corre tanto localmente como em Azure.

  2. User-Assigned Identidade Gerida - Para aplicações alojadas no Azure onde especificas explicitamente qual a identidade gerida a usar, fornecendo o ID do cliente.

  3. Identidade Gerida Atribuída pelo Sistema - Para aplicações alojadas no Azure que utilizam a identidade automaticamente atribuída ao recurso.

  4. Principal de Serviço (Segredo) - ID do cliente, ID do locatário e segredo para cenários automatizados ou CI.

  5. Principal de Serviço (Certificado) - ID do cliente, ID de inquilino e certificado X.509 para maior segurança.

Como DefaultAzureCredential funciona localmente

Quando desenvolve localmente, DefaultAzureCredential tenta autenticar utilizando os seguintes métodos:

az login

Este método faz login no Azure CLI usando a sua conta Microsoft Entra ID. O SDK deteta as suas credenciais em cache e usa-as para obter tokens. Deve configurar o seu utilizador Microsoft Entra ID como Utilizador Redis no recurso Azure Managed Redis através da Autenticação no menu de Recursos do portal Azure.

Principais padrões de implementação

Configuração da ligação:

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

Configuração do Entra ID:

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

Operações básicas do Redis:

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

Ciclo de vida do token e reautenticação automática

A extensão gere automaticamente o ciclo de vida do token OAuth2:

  1. Aquisição inicial - Recebe um token antes de se ligar.
  2. Atualização proativa - Antes do token expirar (cerca de uma hora), recebe um token novo em segundo plano.
  3. Re-autenticação - Re-autentica a ligação com o novo token sem perder comandos.

Para garantir a observabilidade, pode subscrever-se a eventos de tokens:

Event Propósito
TokenRefreshed Nova ficha adquirida
TokenRefreshFailed A atualização do token falhou (ainda a usar o token antigo)
ConnectionReauthenticated Ligação reautenticada com sucesso
ConnectionReauthenticationFailed A reautenticação falhou para a ligação

Protocolo RESP3 vs. RESP2

O exemplo utiliza RESP3 (Protocol = RedisProtocol.Resp3) porque:

  • O RESP2 cria ligações separadas para comandos interativos e pub/sub.
  • Só a ligação interativa é reautenticada proativamente.
  • As ligações pub/sub fecham quando o token expira, causando interrupções breves.
  • O RESP3 multiplexa tudo numa só ligação, evitando estas interrupções.

Pré-requisitos do Azure

  1. Crie uma instância Azure Managed Redis.
  2. Ative a autenticação do ID Microsoft Entra em "Configuração de Acesso a Dados."
  3. Adicione a sua identidade como Utilizador Redis com as permissões apropriadas (Proprietário dos Dados, Contribuidor de Dados, e assim por diante).
  4. Execute az login localmente para se autenticar com a sua conta Entra ID.

Conceitos básicos de Redis

Concept Description
ConnectionMultiplexer Pool de conexões singleton, thread-safe para Redis. Cria-o uma vez e reutiliza-o durante a vida útil da aplicação.
IDatabase Interface para execução de comandos (StringGet, StringSet, HashGet, e assim sucessivamente).
Formato do ponto final endpoint:10000 (TLS) para Azure Managed Redis.

Executando o exemplo

az login
cd sample
dotnet run

Introduza o seu endpoint Redis (por exemplo, <your-redis-name>.<region>.redis.azure.net:10000), escolha o método de autenticação 1 (DefaultAzureCredential) e observe a impressão dos + caracteres a cada segundo, à medida que os comandos são executados com sucesso. Deixe-o funcionar por mais de 60 minutos para verificar se a atualização automática do token funciona.

Considerações sobre a produção

Configuração Valor da amostra Valor de produção
AbortOnConnectFail true false (tentativa novamente no arranque)
BacklogPolicy FailFast Default (comandos de fila durante falhas transitórias)
Vida útil da ligação Loop de demonstração Singleton via DI (IConnectionMultiplexer)

Este exemplo fornece uma implementação de referência completa para autenticação segura e sem palavra-passe do Entra ID em qualquer aplicação .NET que utilize Azure Managed Redis.