Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En este ejemplo se muestra cómo conectar una API web de ASP.NET Core a Azure Managed Redis mediante la autenticación de Microsoft Entra ID con el flujo DefaultAzureCredential. La aplicación evita la autenticación tradicional basada en cadenas de conexión en favor del acceso basado en tokens de Microsoft Entra ID, que cumple con las prácticas más recomendadas y modernas de seguridad.
La aplicación es una API web mínima ASP.NET Core 8.0 que:
- Establece una conexión segura y autenticada a Azure Managed Redis al iniciarse.
- Expone un punto de conexión REST simple que lee y escribe datos en la memoria caché.
- Muestra la administración adecuada del ciclo de vida de la conexión de Redis mediante la inserción de dependencias.
Ir al código en GitHub
Clone el repositorio Microsoft.Azure.StackExchangeRedis en GitHub.
Prerrequisitos
- SDK DE .NET 8.0.
- Una instancia de Azure Managed Redis aprovisionada en la suscripción de Azure.
- El usuario o la entidad de servicio de Azure deben agregarse como usuario de Redis en la caché. En Azure Portal, vaya a Autenticación en el menú Recurso, seleccione Usuario o entidad de servicio y agregue su identidad.
- CLI de Azure para la autenticación de desarrollo local.
Paquetes NuGet necesarios
| Package | Propósito |
|---|---|
Microsoft.Azure.StackExchangeRedis |
Métodos de extensión para StackExchange.Redis que habilitan la autenticación basada en tokens de ID de Microsoft Entra en Azure Managed Redis. |
StackExchange.Redis |
La biblioteca cliente de Redis subyacente para .NET |
Azure.Identity |
Proporciona DefaultAzureCredential y otros tipos de credenciales para autenticarse con servicios de Azure |
Swashbuckle.AspNetCore |
Compatibilidad de Swagger/OpenAPI con documentación y pruebas de API |
Instale el paquete principal:
dotnet add package Microsoft.Azure.StackExchangeRedis
Este paquete incluye StackExchange.Redis y Azure.Identity como dependencias.
Configuración
La aplicación lee desde la configuración el punto de conexión de Redis. Actualice appsettings.Development.json:
{
"Redis": {
"Endpoint": "<your-redis-name>.<region>.redis.azure.net:10000"
}
}
Nota:
Azure Managed Redis usa el puerto 10000 de forma predeterminada. El formato del punto de conexión es <cache-name>.<region>.redis.azure.net:10000.
Flujo de autenticación
Desarrollo local
Antes de ejecutar la aplicación localmente, autentíquese con Azure:
az login
DefaultAzureCredential recoge automáticamente las credenciales de la CLI de Azure y las usa para obtener un token de acceso para el recurso de Redis. Este enfoque elimina la necesidad de administrar o rotar secretos localmente.
Entornos de producción
En entornos hospedados en Azure, como App Service, Container Apps y AKS, DefaultAzureCredential usa:
- Identidad administrada : asignada por el sistema o asignada por el usuario
- Identidad de carga de trabajo : para escenarios de Kubernetes
- Variables de entorno - para la autenticación de la entidad de servicio
No es necesario cambiar el código. Lo mismo DefaultAzureCredential se adapta perfectamente al entorno.
Architecture
Servicio Redis (Services/Redis.cs)
La Redis clase administra el ciclo de vida de la conexión:
var options = new ConfigurationOptions()
{
EndPoints = { endpoint },
LoggerFactory = _loggerFactory,
};
await options.ConfigureForAzureWithTokenCredentialAsync(new DefaultAzureCredential());
_connection = await ConnectionMultiplexer.ConnectAsync(options);
Puntos clave:
-
ConfigureForAzureWithTokenCredentialAsynces un método de extensión deMicrosoft.Azure.StackExchangeRedisque configura la autenticación basada en tokens. -
DefaultAzureCredentialcontrola automáticamente la adquisición y actualización de tokens. - La aplicación establece la conexión una vez al inicio y la comparte entre las solicitudes.
Inserción de dependencia (Program.cs)
La aplicación registra el servicio Redis como singleton e inicializa durante el inicio:
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);
}
Controlador de API (Controllers/SampleController.cs)
El controlador inserta el Redis servicio y muestra las operaciones básicas de caché:
-
GET
/Sample: lee la marca de tiempo de visita anterior de la memoria caché y la actualiza con la hora actual.
Ejecución de la aplicación
Asegúrese de que está autenticado:
az loginActualice el punto de conexión de Redis en
appsettings.Development.json.Ejecute la aplicación:
dotnet runVaya a
https://localhost:<port>/swaggerpara acceder a Swagger UI.
Salida prevista
Al invocar el GET /Sample endpoint:
Primera solicitud:
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)
Los registros de la consola se muestran:
info: Microsoft.Azure.StackExchangeRedis.Sample.AspNet.Controllers.SampleController
Handled GET request. Previous visit time: 2026-01-30T14:23:45
Detalles clave de implementación
Actualización de tokens: la
Microsoft.Azure.StackExchangeRedisbiblioteca actualiza automáticamente los tokens antes de que expiren, por lo que no es necesario controlar la actualización manualmente.Resistencia de conexión: El
ConnectionMultiplexerde StackExchange.Redis administra la lógica de reconexión por sí solo.Limpieza de recursos: el
Redisservicio implementaIDisposablepara cerrar correctamente la conexión cuando se cierra la aplicación.Integración de registro: el cliente de Redis funciona con .NET para la salida de registro unificada.
Solución de problemas
| Cuestión | Resolución |
|---|---|
No connection is available |
Compruebe el formato del punto de conexión y el puerto (10000). Asegúrese de que la instancia de Redis está aprovisionada y accesible. |
AuthenticationFailedException |
Ejecute az login para actualizar las credenciales. Compruebe que su identidad se ha agregado como usuario de Redis en Autenticación del menú de Recursos. |
Unauthorized |
Asegúrese de agregar Microsoft Entra ID como usuario de Redis en la instancia de Azure Managed Redis. Para obtener más información, consulte Uso de Microsoft Entra ID para la autenticación de la memoria caché. |