Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Questo esempio illustra come connettere un'API Web ASP.NET Core a Redis gestita di Azure usando l'autenticazione con l'ID Entra di Microsoft con il flusso DefaultAzureCredential. L'applicazione evita l'autenticazione tradizionale basata su stringhe di connessione a favore dell'accesso con ID Microsoft Entra basato su token, allineato alle procedure consigliate per la sicurezza moderne.
L'applicazione è un'API Web ASP.NET Core 8.0 minima che:
- Stabilisce una connessione sicura e autenticata a Redis gestito di Azure all'avvio.
- Espone un semplice endpoint REST che legge e scrive i dati nella cache.
- Illustra la corretta gestione del ciclo di vita della connessione Redis tramite iniezione delle dipendenze.
Passare al codice in GitHub
Clonare il repository Microsoft.Azure.StackExchangeRedis in GitHub.
Prerequisiti
- .NET 8.0 SDK.
- Un'istanza Redis gestita di Azure implementata nella tua sottoscrizione di Azure.
- L'utente o l'entità servizio di Azure deve essere aggiunta come utente Redis nella cache. Nel portale di Azure passare ad Autenticazione nel menu Risorsa, selezionare Utente o entità servizio e aggiungere l'identità.
- Interfaccia della riga di comando di Azure per l'autenticazione di sviluppo locale.
Pacchetti NuGet necessari
| Package | Scopo |
|---|---|
Microsoft.Azure.StackExchangeRedis |
Metodi di estensione per StackExchange.Redis che abilitano l'autenticazione basata su token id di Microsoft Entra in Azure Managed Redis |
StackExchange.Redis |
Libreria client Redis sottostante per .NET |
Azure.Identity |
Fornisce DefaultAzureCredential e altri tipi di credenziali per l'autenticazione con i servizi di Azure |
Swashbuckle.AspNetCore |
Supporto di Swagger/OpenAPI per la documentazione e il test dell'API |
Installare il pacchetto primario:
dotnet add package Microsoft.Azure.StackExchangeRedis
Questo pacchetto inserisce StackExchange.Redis e Azure.Identity come dipendenze.
Configurazione
L'applicazione legge l'endpoint Redis dalla configurazione. Aggiornare appsettings.Development.json:
{
"Redis": {
"Endpoint": "<your-redis-name>.<region>.redis.azure.net:10000"
}
}
Annotazioni
Per impostazione predefinita, Azure Managed Redis usa la porta 10000 . Il formato dell'endpoint segue <cache-name>.<region>.redis.azure.net:10000.
Flusso di autenticazione
Sviluppo locale
Prima di eseguire l'applicazione in locale, eseguire l'autenticazione con Azure:
az login
Raccoglie automaticamente le credenziali della CLI di Azure e le usa per ottenere un token di accesso per la risorsa Redis. Questo approccio elimina la necessità di gestire o ruotare i segreti in locale.
Ambienti di produzione
Negli ambienti ospitati in Azure, come App Service, Container Apps e AKS, DefaultAzureCredential usa:
- Identità gestita - assegnata dal sistema o assegnata dall'utente
- Identità del carico di lavoro : per gli scenari Kubernetes
- Variabili di ambiente per l'autenticazione dell'entità servizio
Non è necessario modificare il codice. Lo stesso DefaultAzureCredential si adatta perfettamente all'ambiente.
Architecture
Servizio Redis (Services/Redis.cs)
La Redis classe gestisce il ciclo di vita della connessione:
var options = new ConfigurationOptions()
{
EndPoints = { endpoint },
LoggerFactory = _loggerFactory,
};
await options.ConfigureForAzureWithTokenCredentialAsync(new DefaultAzureCredential());
_connection = await ConnectionMultiplexer.ConnectAsync(options);
Punti chiave:
-
ConfigureForAzureWithTokenCredentialAsyncè un metodo di estensione daMicrosoft.Azure.StackExchangeRedische configura l'autenticazione basata su token -
DefaultAzureCredentialgestisce automaticamente l'acquisizione e l'aggiornamento dei token - L'app stabilisce la connessione una sola volta all'avvio e la condivide tra le richieste
Inserimento delle dipendenze (Program.cs)
L'app registra il servizio Redis come singleton e lo inizializza durante l'avvio:
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);
}
Controller API (Controllers/SampleController.cs)
Il controller inserisce il Redis servizio e illustra le operazioni di base della cache:
-
GET
/Sample: legge il timestamp della visita precedente dalla cache e lo aggiorna con l'ora corrente
Esecuzione dell'applicazione
Assicurarsi di essere autenticati:
az loginAggiornare l'endpoint Redis in
appsettings.Development.json.Eseguire l'applicazione:
dotnet runPassare a
https://localhost:<port>/swaggerper accedere all'interfaccia utente di Swagger.
Output previsto
Quando si richiama l'endpoint GET /Sample :
Prima richiesta:
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)
I log della console visualizzano:
info: Microsoft.Azure.StackExchangeRedis.Sample.AspNet.Controllers.SampleController
Handled GET request. Previous visit time: 2026-01-30T14:23:45
Dettagli chiave dell'implementazione
Aggiornamento del token: la
Microsoft.Azure.StackExchangeRedislibreria aggiorna automaticamente i token prima della scadenza, quindi non è necessario gestire manualmente l'aggiornamento.Resilienza della connessione:
ConnectionMultiplexerda StackExchange.Redis gestisce la logica di riconnessione autonomamente.Pulizia delle risorse: il
Redisservizio implementaIDisposableper chiudere correttamente la connessione quando l'applicazione viene arrestata.Integrazione dei log: il client Redis funziona con .NET per un output di log unificato.
Risoluzione dei problemi
| Problema | Risoluzione |
|---|---|
No connection is available |
Verificare il formato e la porta dell'endpoint (10000). Assicurarsi che l'istanza di Redis sia provisionata e accessibile. |
AuthenticationFailedException |
Eseguire az login per aggiornare le credenziali. Verificare che l'identità sia stata aggiunta come utente Redis in Autenticazione nel menu Risorse. |
Unauthorized |
Assicurarsi che l'identità Microsoft Entra ID sia stata aggiunta come utente Redis nell'istanza di Managed Redis di Azure. Per altre informazioni, vedere Usare Microsoft Entra ID per l'autenticazione cache. |