Bagikan melalui


Sampel Azure Managed Redis - ASP.NET Core Web API

Sampel ini menunjukkan cara menyambungkan ASP.NET Core Web API ke Azure Managed Redis dengan menggunakan autentikasi ID Microsoft Entra dengan DefaultAzureCredential alur. Aplikasi ini menghindari autentikasi berbasis string koneksi tradisional demi akses ID Microsoft Entra berbasis token, yang selaras dengan praktik terbaik keamanan modern.

Aplikasi ini adalah API Web core 8.0 ASP.NET minimal yang:

  1. Membuat koneksi yang aman dan diautentikasi ke Azure Managed Redis saat startup.
  2. Mengekspos titik akhir REST sederhana yang membaca dan menulis data ke cache.
  3. Menunjukkan manajemen siklus hidup koneksi Redis yang tepat dengan menggunakan injeksi dependensi.

Langsung ke kode pada GitHub

Klon repositori Microsoft.Azure.StackExchangeRedis di GitHub.

Prasyarat

  • .NET 8.0 SDK.
  • Instans Azure Managed Redis yang disediakan di langganan Azure Anda.
  • Pengguna Atau perwakilan layanan Azure Anda harus ditambahkan sebagai pengguna Redis di cache. Di portal Microsoft Azure, buka Autentikasi pada menu Sumber Daya, pilih Pengguna atau perwakilan layanan, dan tambahkan identitas Anda.
  • Azure CLI untuk autentikasi pengembangan lokal.

Paket NuGet yang Diperlukan

Package Tujuan
Microsoft.Azure.StackExchangeRedis Metode ekstensi untuk StackExchange.Redis yang mengaktifkan autentikasi berbasis token ID Microsoft Entra ke Azure Managed Redis
StackExchange.Redis Pustaka klien Redis yang mendasar untuk .NET
Azure.Identity Menyediakan DefaultAzureCredential dan jenis kredensial lainnya untuk mengautentikasi dengan layanan Azure
Swashbuckle.AspNetCore Dukungan Swagger/OpenAPI untuk dokumentasi dan pengujian API

Instal paket utama:

dotnet add package Microsoft.Azure.StackExchangeRedis

Paket ini membawa masuk StackExchange.Redis dan Azure.Identity sebagai dependensi.

Konfigurasi

Aplikasi membaca titik akhir Redis dari konfigurasi. Perbarui appsettings.Development.json:

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

Nota

Azure Managed Redis menggunakan port 10000 secara default. Format titik akhir mengikuti <cache-name>.<region>.redis.azure.net:10000.

Alur Autentikasi

Pembangunan Lokal

Sebelum menjalankan aplikasi secara lokal, autentikasi dengan Azure:

az login

DefaultAzureCredential secara otomatis mengambil kredensial Azure CLI Anda dan menggunakannya untuk mendapatkan token akses ke sumber daya Redis. Pendekatan ini menghilangkan kebutuhan untuk mengelola atau memutar rahasia secara lokal.

Lingkungan produksi

Di lingkungan yang dihosting Azure seperti App Service, Container Apps, dan AKS, DefaultAzureCredential menggunakan:

  • Identitas Terkelola - ditetapkan sistem atau ditetapkan pengguna
  • Identitas Beban Kerja - untuk skenario Kubernetes
  • Variabel lingkungan - untuk autentikasi prinsipal layanan

Anda tidak perlu mengubah kode Anda. Sistem yang sama DefaultAzureCredential beradaptasi dengan mulus dengan lingkungan.

Architecture

Layanan Redis (Services/Redis.cs)

Kelas Redis mengelola siklus hidup koneksi:

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

await options.ConfigureForAzureWithTokenCredentialAsync(new DefaultAzureCredential());

_connection = await ConnectionMultiplexer.ConnectAsync(options);

Poin utama:

  • ConfigureForAzureWithTokenCredentialAsync adalah metode ekstensi dari Microsoft.Azure.StackExchangeRedis yang menyiapkan autentikasi berbasis token
  • DefaultAzureCredential secara otomatis menangani akuisisi dan refresh token
  • Aplikasi ini membuat koneksi saat startup sekali dan membagikannya pada setiap permintaan

Injeksi dependensi (Program.cs)

Aplikasi ini mendaftarkan layanan Redis sebagai singleton dan menginisialisasinya selama startup:

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

Pengontrol API (Controllers/SampleController.cs)

Pengontrol menyuntikkan Redis layanan dan menunjukkan operasi cache dasar:

  • GET /Sample: Membaca tanda waktu kunjungan sebelumnya dari cache dan memperbaruinya dengan waktu saat ini

Menjalankan aplikasi

  1. Pastikan Anda diautentikasi:

    az login
    
  2. Perbarui endpoint Redis di appsettings.Development.json.

  3. Jalankan aplikasi:

    dotnet run
    
  4. Navigasi ke https://localhost:<port>/swagger untuk mengakses UI Swagger.

Output yang diharapkan

Saat memanggil endpoint GET /Sample:

Permintaan pertama:

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)

Tampilan log konsol:

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

Detail implementasi utama

  • Refresh token: Microsoft.Azure.StackExchangeRedis Pustaka secara otomatis menyegarkan token sebelum kedaluwarsa, sehingga Anda tidak perlu menangani refresh secara manual.

  • Ketahanan koneksi: ConnectionMultiplexer dari StackExchange.Redis mengelola logika sambungan ulangnya sendiri.

  • Pembersihan sumber daya: Layanan Redis menerapkan IDisposable untuk menutup koneksi dengan benar saat aplikasi dimatikan.

  • Integrasi pengelogan: Klien Redis bekerja dengan . ILoggerFactory NET untuk output pengelogan terpadu.

Troubleshooting

Masalah Resolusi
No connection is available Verifikasi format dan port titik akhir (10000). Pastikan instans Redis disediakan dan dapat diakses.
AuthenticationFailedException Jalankan az login untuk me-refresh kredensial. Verifikasi identitas Anda ditambahkan sebagai pengguna Redis di bawah Autentikasi pada menu Sumber Daya.
Unauthorized Pastikan identitas ID Microsoft Entra Anda ditambahkan sebagai pengguna Redis pada instans Azure Managed Redis. Untuk informasi selengkapnya, lihat Menggunakan ID Microsoft Entra untuk autentikasi cache.