Partilhar via


Exemplo de Azure Managed Redis - API Web ASP.NET Core

Este exemplo mostra como ligar uma ASP.NET Core Web API ao Redis Gerido do Azure utilizando a autenticação do Microsoft Entra ID com o fluxo DefaultAzureCredential. A aplicação evita a autenticação tradicional baseada em cadeias de ligação em favor do acesso baseado em token, Microsoft Entra ID, que está alinhado com as melhores práticas de segurança modernas.

A aplicação é uma API Web mínima do ASP.NET Core 8.0 que:

  1. Estabelece uma ligação segura e autenticada ao Azure Managed Redis no arranque.
  2. Expõe um endpoint REST simples que lê e escreve dados na cache.
  3. Demonstra o gerenciamento adequado do ciclo de vida da ligação Redis através da injeção de dependências.

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 de desenvolvimento local.

Pacotes NuGet Obrigatórios

Package Propósito
Microsoft.Azure.StackExchangeRedis Métodos de extensão para StackExchange.Redis que permitem a autenticação com token de ID do Microsoft Entra para o Azure Managed Redis
StackExchange.Redis A biblioteca cliente Redis subjacente para .NET
Azure.Identity Fornece DefaultAzureCredential e outros tipos de credenciais para autenticação com serviços Azure
Swashbuckle.AspNetCore Suporte Swagger/OpenAPI para documentação e testes da API

Instale o pacote principal:

dotnet add package Microsoft.Azure.StackExchangeRedis

Este pacote traz StackExchange.Redis e Azure.Identity como dependências.

Configuração

A aplicação lê o endpoint Redis a partir da configuração. Atualização appsettings.Development.json:

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

Observação

O Azure Managed Redis usa a porta 10000 por defeito. O formato endpoint segue <cache-name>.<region>.redis.azure.net:10000.

Fluxo de Autenticação

Desenvolvimento Local

Antes de executar a aplicação localmente, autentique com o Azure:

az login

Ele DefaultAzureCredential recolhe automaticamente as suas credenciais CLI do Azure e usa-as para obter um token de acesso para o recurso Redis. Esta abordagem elimina a necessidade de gerir ou substituir segredos localmente.

Ambientes de produção

Em ambientes alojados no Azure, como App Service, Container Apps e AKS, DefaultAzureCredential utiliza:

  • Identidade Gerida - atribuída ao sistema ou ao utilizador
  • Workload Identity - para cenários Kubernetes
  • Variáveis de ambiente - para autenticação do serviço principal

Não precisas de mudar o teu código. O mesmo DefaultAzureCredential adapta-se perfeitamente ao ambiente.

Architecture

Serviço Redis (Services/Redis.cs)

A Redis classe gere o ciclo de vida da ligação:

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

await options.ConfigureForAzureWithTokenCredentialAsync(new DefaultAzureCredential());

_connection = await ConnectionMultiplexer.ConnectAsync(options);

Pontos principais:

  • ConfigureForAzureWithTokenCredentialAsync é um método de extensão de Microsoft.Azure.StackExchangeRedis que configura autenticação baseada em tokens.
  • DefaultAzureCredential gere automaticamente a aquisição e atualização de tokens
  • A aplicação estabelece a ligação assim que arranca e partilha-a entre pedidos

Injeção de dependência (Program.cs)

A aplicação regista o serviço Redis como singleton e inicializa-o durante o arranque:

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);
}

Controlador API (Controllers/SampleController.cs)

O controlador injeta o Redis serviço e demonstra operações básicas de cache:

  • GET /Sample: Lê o carimbo temporal da visita anterior da cache e atualiza-o com a hora atual

Execução da aplicação

  1. Certifique-se de que está autenticado:

    az login
    
  2. Atualize o endpoint Redis em appsettings.Development.json.

  3. Execute a aplicação:

    dotnet run
    
  4. Navegue para https://localhost:<port>/swagger para aceder à interface Swagger UI.

Resultado esperado

Ao invocar o GET /Sample endpoint:

Primeiro pedido:

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)

Os registos da consola mostram:

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

Principais detalhes da implementação

  • Atualização de tokens: A Microsoft.Azure.StackExchangeRedis biblioteca atualiza automaticamente os tokens antes de expirarem, por isso não precisas de fazer a atualização manualmente.

  • Resiliência da ligação: O ConnectionMultiplexer do StackExchange.Redis gere a lógica de reconexão por si só.

  • Limpeza de recursos: O Redis serviço implementa IDisposable para fechar corretamente a ligação quando a aplicação é desligada.

  • Integração de Logging: O cliente Redis trabalha com .NET para uma saída unificada de logs.

Solução de problemas

Questão Resolução
No connection is available Verifique o formato do endpoint e a porta (10000). Certifique-se de que a instância Redis está provisionada e acessível.
AuthenticationFailedException Corre az login para atualizar as credenciais. Verifique se a sua identidade foi adicionada como utilizador Redis em Autenticação no menu de Recursos.
Unauthorized Certifique-se de que a sua identidade Microsoft Entra ID está adicionada como utilizador Redis na instância Azure Managed Redis. Para obter mais informações, consulte Usar o Microsoft Entra ID para autenticação de cache.