Udostępnij przez


Przykład usługi Azure Managed Redis — ASP.NET Core Web API

W tym przykładzie pokazano, jak połączyć API platformy ASP.NET Core z usługą Azure Managed Redis przy użyciu uwierzytelniania Microsoft Entra ID, korzystając z przepływu DefaultAzureCredential. Aplikacja unika tradycyjnego uwierzytelniania opartego na parametrach połączenia na rzecz dostępu opartego na tokenach firmy Microsoft Entra ID, który jest zgodny z nowoczesnymi najlepszymi rozwiązaniami w zakresie zabezpieczeń.

Aplikacja jest minimalnym interfejsem API sieci Web ASP.NET Core 8.0, który:

  1. Ustanawia bezpieczne, uwierzytelnione połączenie z usługą Azure Managed Redis podczas uruchamiania.
  2. Uwidacznia prosty punkt końcowy REST, który odczytuje i zapisuje dane w pamięci podręcznej.
  3. Demonstruje prawidłowe zarządzanie cyklem życia połączenia usługi Redis przy użyciu wstrzykiwania zależności.

Przejdź do kodu w usłudze GitHub

Sklonuj repozytorium Microsoft.Azure.StackExchangeRedis w witrynie GitHub.

Wymagania wstępne

  • Zestaw .NET 8.0 SDK.
  • Wystąpienie usługi Azure Managed Redis przydzielone w subskrypcji Azure.
  • Użytkownik platformy Azure lub jednostka usługi musi zostać dodany jako użytkownik usługi Redis w pamięci podręcznej. W witrynie Azure Portal przejdź do pozycji Uwierzytelnianie w menu Zasób, wybierz pozycję Użytkownik lub jednostka usługi i dodaj swoją tożsamość.
  • Interfejs wiersza polecenia platformy Azure na potrzeby lokalnego uwierzytelniania programistycznego.

Wymagane pakiety NuGet

Package Przeznaczenie
Microsoft.Azure.StackExchangeRedis Metody rozszerzeń dla StackExchange.Redis, które umożliwiają uwierzytelnianie oparte na tokenach Microsoft Entra ID do Azure Managed Redis.
StackExchange.Redis Podstawowa biblioteka klienta Redis dla platformy .NET
Azure.Identity Udostępnia DefaultAzureCredential i inne typy poświadczeń do uwierzytelniania za pomocą usług platformy Azure
Swashbuckle.AspNetCore Wsparcie dla Swagger/OpenAPI do dokumentacji i testowania API

Zainstaluj pakiet podstawowy:

dotnet add package Microsoft.Azure.StackExchangeRedis

Ten pakiet wprowadza StackExchange.Redis i Azure.Identity jako zależności.

Konfiguracja

Aplikacja odczytuje punkt końcowy Redis z konfiguracji. Aktualizacja appsettings.Development.json:

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

Uwaga / Notatka

Usługa Azure Managed Redis domyślnie używa portu 10000 . Format punktu końcowego jest następujący: <cache-name>.<region>.redis.azure.net:10000.

Przepływ uwierzytelniania

Rozwój lokalny

Przed uruchomieniem aplikacji lokalnie uwierzytelnij się za pomocą platformy Azure:

az login

Narzędzie DefaultAzureCredential automatycznie pobiera poświadczenia Azure CLI i używa ich do uzyskania tokenu dostępu dla zasobu Redis. Takie podejście eliminuje konieczność lokalnego zarządzania sekretami lub ich rotacji.

Środowiska produkcyjne

W środowiskach hostowanych na platformie Azure, takich jak App Service, Container Apps i AKS, DefaultAzureCredential są wykorzystywane:

  • Tożsamość zarządzana — przypisana przez system lub przypisana przez użytkownika
  • Tożsamość obciążenia — w scenariuszach platformy Kubernetes
  • Zmienne środowiskowe — do uwierzytelniania głównego usługodawcy

Nie musisz zmieniać kodu. To samo DefaultAzureCredential bezproblemowo dostosowuje się do środowiska.

Architecture

Usługa Redis (Services/Redis.cs)

Klasa Redis zarządza cyklem życia połączenia:

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

await options.ConfigureForAzureWithTokenCredentialAsync(new DefaultAzureCredential());

_connection = await ConnectionMultiplexer.ConnectAsync(options);

Najważniejsze kwestie:

  • ConfigureForAzureWithTokenCredentialAsync to metoda rozszerzenia z Microsoft.Azure.StackExchangeRedis, która konfiguruje uwierzytelnianie oparte na tokenach
  • DefaultAzureCredential automatycznie obsługuje pozyskiwanie i odświeżanie tokenów
  • Aplikacja ustanawia połączenie raz podczas uruchamiania i udostępnia je między żądaniami

Wstrzykiwanie zależności (Program.cs)

Aplikacja rejestruje usługę Redis jako singleton i inicjuje ją podczas uruchamiania.

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

Kontroler interfejsu API (Controllers/SampleController.cs)

Kontroler wprowadza usługę Redis i demonstruje podstawowe operacje pamięci podręcznej:

  • GET /Sample: Odczytuje znacznik czasu poprzedniej wizyty z pamięci podręcznej i aktualizuje go przy użyciu bieżącej godziny

Uruchamianie aplikacji

  1. Upewnij się, że wykonano uwierzytelnianie:

    az login
    
  2. Zaktualizuj punkt końcowy usługi Redis w pliku appsettings.Development.json.

  3. Uruchom aplikację:

    dotnet run
    
  4. Przejdź do witryny https://localhost:<port>/swagger aby uzyskać dostęp do interfejsu użytkownika Swagger.

Oczekiwane dane wyjściowe

Podczas wywoływania punktu końcowego GET /Sample :

Pierwsze żądanie:

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)

Wyświetlane są dzienniki konsoli:

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

Kluczowe szczegóły implementacji

  • Odświeżanie tokenu: Microsoft.Azure.StackExchangeRedis biblioteka automatycznie odświeża tokeny przed ich wygaśnięciem, więc nie trzeba obsługiwać odświeżania ręcznie.

  • Odporność połączenia:ConnectionMultiplexer StackExchange.Redis samodzielnie zarządza logiką ponownego łączenia.

  • Oczyszczanie zasobów: Redis usługa implementuje prawidłowe zamykanie IDisposable połączenia po zamknięciu aplikacji.

  • Integracja z systemem logowania: klient Redis współpracuje z frameworkiem .NET w celu uzyskania ujednoliconego logowania wyjściowego.

Rozwiązywanie problemów

Problematyka Rezolucja
No connection is available Sprawdź format punktu końcowego i port (10000). Upewnij się, że instancja Redis jest utworzona i dostępna.
AuthenticationFailedException Uruchom polecenie az login , aby odświeżyć poświadczenia. Sprawdź, czy twoja tożsamość została dodana jako użytkownik Redis w obszarze Uwierzytelnianie w menu Zasobów.
Unauthorized Upewnij się, że tożsamość Microsoft Entra ID jest dodana jako użytkownik usługi Redis w zarządzanej instancji Azure Redis. Aby uzyskać więcej informacji, zobacz Używanie Microsoft Entra ID do uwierzytelniania w pamięci podręcznej.