Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In diesem Beispiel wird gezeigt, wie Sie eine ASP.NET Core Web-API mit Azure Managed Redis mithilfe der Microsoft Entra ID-Authentifizierung im DefaultAzureCredential Ablauf verbinden. Die Anwendung vermeidet die herkömmliche Verbindungszeichenfolgenbasierte Authentifizierung zugunsten des tokenbasierten Microsoft Entra ID-Zugriffs, der sich an modernen bewährten Sicherheitsmethoden richtet.
Die Anwendung ist eine minimale ASP.NET Core 8.0-Web-API, die:
- Stellt eine sichere, authentifizierte Verbindung mit Azure Managed Redis beim Start her.
- Macht einen einfachen REST-Endpunkt verfügbar, der Daten im Cache liest und schreibt.
- Veranschaulicht die ordnungsgemäße Verwaltung des Redis-Verbindungslebenszyklus mithilfe der Abhängigkeitsinjektion.
Direktes Navigieren zum Code auf GitHub
Klonen Sie das Microsoft.Azure.StackExchangeRedis-Repository auf GitHub.
Voraussetzungen
- .NET 8.0 SDK.
- Eine Azure Managed Redis-Instanz , die in Ihrem Azure-Abonnement bereitgestellt wird.
- Ihr Azure-Benutzer oder -Dienstprinzipal muss als Redis-Benutzer im Cache hinzugefügt werden. Wechseln Sie im Azure-Portal zum Menü " Ressource" zur Authentifizierung , wählen Sie "Benutzer" oder "Dienstprinzipal" aus, und fügen Sie Ihre Identität hinzu.
- Azure CLI für die lokale Entwicklungsauthentifizierung.
Erforderliche NuGet-Pakete
| Package | Zweck |
|---|---|
Microsoft.Azure.StackExchangeRedis |
Erweiterungsmethoden für StackExchange.Redis, die die tokenbasierte Microsoft Entra ID-Authentifizierung für Azure Managed Redis aktivieren |
StackExchange.Redis |
Die zugrunde liegende Redis-Clientbibliothek für .NET |
Azure.Identity |
Stellt DefaultAzureCredential und andere Anmeldeinformationstypen für die Authentifizierung mit Azure-Diensten bereit. |
Swashbuckle.AspNetCore |
Swagger/OpenAPI-Unterstützung für API-Dokumentation und -Tests |
Installieren Sie das primäre Paket:
dotnet add package Microsoft.Azure.StackExchangeRedis
Dieses Paket umfasst StackExchange.Redis und Azure.Identity als Abhängigkeiten.
Konfiguration
Die Anwendung liest den Redis-Endpunkt aus der Konfiguration. Aktualisieren Sie appsettings.Development.json:
{
"Redis": {
"Endpoint": "<your-redis-name>.<region>.redis.azure.net:10000"
}
}
Hinweis
Azure Managed Redis verwendet standardmäßig den Port 10000. Das Endpunktformat folgt <cache-name>.<region>.redis.azure.net:10000.
Authentifizierungsablauf
Lokale Entwicklung
Bevor Sie die Anwendung lokal ausführen, authentifizieren Sie sich bei Azure:
az login
Die DefaultAzureCredential erfasst automatisch Ihre Azure CLI-Anmeldeinformationen und verwendet diese, um ein Zugriffstoken für die Redis-Ressource abzurufen. Bei diesem Ansatz ist es nicht erforderlich, Geheimnisse lokal zu verwalten oder zu rotieren.
Produktionsumgebungen
In von Azure gehosteten Umgebungen wie App Service, Container-Apps und AKS verwendet DefaultAzureCredential Folgendes:
- Verwaltete Identität – vom System zugewiesen oder vom Benutzer zugewiesen
- Workload Identity – für Kubernetes-Szenarien
- Umgebungsvariablen – für die Dienstprinzipal-Authentifizierung
Sie müssen Ihren Code nicht ändern. Dasselbe DefaultAzureCredential passt sich nahtlos an die Umgebung an.
Architektur
Redis-Dienst (Services/Redis.cs)
Die Redis Klasse verwaltet den Verbindungslebenszyklus:
var options = new ConfigurationOptions()
{
EndPoints = { endpoint },
LoggerFactory = _loggerFactory,
};
await options.ConfigureForAzureWithTokenCredentialAsync(new DefaultAzureCredential());
_connection = await ConnectionMultiplexer.ConnectAsync(options);
Wichtige Punkte:
-
ConfigureForAzureWithTokenCredentialAsyncist eine Erweiterungsmethode ausMicrosoft.Azure.StackExchangeRedis, die eine tokenbasierte Authentifizierung einrichtet. -
DefaultAzureCredentialübernimmt automatisch die Tokenbeschaffung und -aktualisierung - Die App stellt die Verbindung beim Start einmalig her und teilt sie über Anfragen hinweg.
Dependency Injection (Program.cs)
Die App registriert den Redis-Dienst als Singleton und initialisiert ihn während des Starts:
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);
}
API-Controller (Controllers/SampleController.cs)
Der Controller fügt den Redis Dienst ein und veranschaulicht grundlegende Cachevorgänge:
-
GET
/Sample: Liest den vorherigen Zeitstempel des Besuchs aus dem Cache und aktualisiert ihn mit der aktuellen Uhrzeit.
Ausführen der Anwendung
Stellen Sie sicher, dass Sie authentifiziert sind:
az loginAktualisieren Sie den Redis-Endpunkt in
appsettings.Development.json.Führen Sie die Anwendung aus.
dotnet runNavigieren Sie zu
https://localhost:<port>/swagger, um auf die Swagger-Benutzeroberfläche zuzugreifen.
Erwartete Ausgabe
Beim Aufrufen des GET /Sample Endpunkts:
Erste Anforderung:
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)
Die Konsolenprotokolle werden angezeigt:
info: Microsoft.Azure.StackExchangeRedis.Sample.AspNet.Controllers.SampleController
Handled GET request. Previous visit time: 2026-01-30T14:23:45
Wichtige Implementierungsdetails
Tokenaktualisierung: Die
Microsoft.Azure.StackExchangeRedisBibliothek aktualisiert Token automatisch, bevor sie ablaufen, sodass Sie die Aktualisierung nicht manuell verarbeiten müssen.Verbindungsresilienz: Die
ConnectionMultiplexervon StackExchange.Redis verwaltet die Logik für die erneute Verbindung eigenständig.Ressourcenbereinigung: Der
RedisDienst implementiertIDisposable, um die Verbindung ordnungsgemäß zu schließen, wenn die Anwendung heruntergefahren wird.Protokollierungsintegration: Der Redis-Client funktioniert mit .NET für einheitliche Protokollierungsausgaben.
Problembehandlung
| Thema | Beschluss |
|---|---|
No connection is available |
Überprüfen Sie das Endpunktformat und den Port (10000). Stellen Sie sicher, dass die Redis-Instanz bereitgestellt und barrierefrei ist. |
AuthenticationFailedException |
Führen Sie az login aus, um Anmeldeinformationen zu aktualisieren. Überprüfen Sie, ob Ihre Identität als Redis-Benutzer unter "Authentifizierung " im Menü "Ressource" hinzugefügt wird. |
Unauthorized |
Stellen Sie sicher, dass Ihre Microsoft Entra ID-Identität als Redis-Benutzer zur verwalteten Azure Redis-Instanz hinzugefügt wird. Weitere Informationen finden Sie unter Verwenden der Microsoft Entra-ID für die Cacheauthentifizierung. |