Anmerkung
Der Zugriff auf diese Seite erfordert eine Genehmigung. Du kannst versuchen, dich anzumelden oder die Verzeichnisse zu wechseln.
Der Zugriff auf diese Seite erfordert eine Genehmigung. Du kannst versuchen , die Verzeichnisse 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. |