Partager via


Démarrage rapide : Utiliser Azure Managed Redis dans .NET Core

Cette application console .NET 8 montre comment se connecter à Azure Managed Redis à l’aide de l’authentification Microsoft Entra ID . La proposition de valeur principale est l’authentification sans mot de passe avec l’actualisation automatique des jetons, fournissant une approche sécurisée et moderne de la connectivité Redis.

Passer au code sur GitHub

Clonez le dépôt Microsoft.Azure.StackExchangeRedis sur GitHub.

Prerequisites

  • KIT SDK .NET 8.0.
  • Une instance Redis managée Azure provisionnée dans votre abonnement Azure.
  • Votre utilisateur ou principal de service Azure doit être ajouté en tant qu’utilisateur Redis dans le cache. Dans le portail Azure, accédez à l’authentification dans le menu Ressources, sélectionnez Utilisateur ou principal de service, puis ajoutez votre identité.
  • Azure CLI pour l'authentification locale de développement.

Packages NuGet requis

Package Objectif
Microsoft.Azure.StackExchangeRedis Bibliothèque d’extensions qui ajoute l’authentification Microsoft Entra ID à StackExchange.Redis
Azure.Identity Fournit DefaultAzureCredential et d’autres implémentations d’identité Azure
StackExchange.Redis Le client Redis sous-jacent (incorporé en tant que dépendance)
Microsoft.Extensions.Logging.Console Enregistrement des logs de console pour les diagnostics

Méthodes d’authentification

L’extension prend en charge plusieurs types d’identités, chacun avec une méthode d’extension correspondante ConfigureForAzure*() :

  1. DefaultAzureCredential - Approche recommandée. Il chaîne plusieurs sources d’informations d’identification (variables d’environnement, identité managée, authentification Azure CLI, informations d’identification Visual Studio, etc.) et utilise le premier qui fonctionne. Il est idéal pour le code qui s’exécute localement et dans Azure.

  2. Identité managée assignée par l'utilisateur - pour les applications hébergées par Azure où vous spécifiez explicitement l’identité managée à utiliser en fournissant son ID client.

  3. Identité managée attribuée par le système - pour les applications hébergées sur Azure qui utilisent l’identité automatiquement affectée à la ressource.

  4. Principal de service (secret) : ID de client, ID de locataire et secret pour les scénarios automatisés ou d’intégration continue (CI).

  5. Service Principal (Certificat) - ID client, ID de locataire et certificat X.509 pour une sécurité plus élevée.

Comment DefaultAzureCredential fonctionne localement

Lorsque vous développez localement, DefaultAzureCredential tente de s’authentifier à l’aide des méthodes suivantes :

az login

Cette méthode vous connecte à Azure CLI à l’aide de votre compte Microsoft Entra ID. Le Kit de développement logiciel (SDK) détecte vos informations d’identification mises en cache et les utilise pour obtenir des jetons. Vous devez configurer votre utilisateur Microsoft Entra ID en tant qu’utilisateur Redis sur la ressource Redis Azure managée via l’option Authentification dans le menu Ressource du portail Azure.

Modèles d’implémentation clés

Configuration de la connexion :

ConfigurationOptions configurationOptions = new()
{
    Protocol = RedisProtocol.Resp3,  // Recommended for seamless re-auth
    LoggerFactory = loggerFactory,
    AbortOnConnectFail = true,       // Fail fast (use false in production)
    BacklogPolicy = BacklogPolicy.FailFast
};

Configuration de l’ID Entra :

await configurationOptions.ConfigureForAzureWithTokenCredentialAsync(new DefaultAzureCredential());
var connection = await ConnectionMultiplexer.ConnectAsync(configurationOptions);

Opérations Redis de base :

var database = connection.GetDatabase();
await database.StringSetAsync("key", "value");
var value = await database.StringGetAsync("key");

Cycle de vie des jetons et réauthentification automatique

L’extension gère automatiquement le cycle de vie des jetons OAuth2 :

  1. Acquisition initiale : elle obtient un jeton avant de se connecter.
  2. Actualisation proactive : avant l’expiration du jeton (environ une heure), il obtient un nouveau jeton en arrière-plan.
  3. Réauthentification : elle authentifie à nouveau la connexion avec le nouveau jeton sans supprimer de commandes.

Pour l’observabilité, vous pouvez vous abonner aux événements liés aux jetons :

Événement Objectif
TokenRefreshed Nouveau jeton acquis
TokenRefreshFailed Échec de l'actualisation du jeton (l'ancien jeton est toujours utilisé)
ConnectionReauthenticated Connexion correctement authentifiée
ConnectionReauthenticationFailed Échec de la ré-authentification pour une connexion

Protocole RESP3 et RESP2

L’exemple utilise RESP3 (Protocol = RedisProtocol.Resp3) car :

  • RESP2 crée des connexions distinctes pour les commandes interactives et pub/sub.
  • Seule la connexion interactive est authentifiée de manière proactive.
  • Les connexions pub/sub se ferment à l’expiration de leur jeton, provoquant de courtes interruptions.
  • RESP3 multiplexe tout sur une connexion, ce qui évite ces interruptions.

Conditions préalables pour Azure

  1. Créez une instance Redis managée Azure.
  2. Activez l’authentification d’ID Microsoft Entra sous « Configuration de l’accès aux données ».
  3. Ajoutez votre identité en tant qu’utilisateur Redis avec les autorisations appropriées (Propriétaire des données, Contributeur de données, etc.).
  4. Courir az login localement pour vous authentifier auprès de votre compte Entra ID.

Concepts de base de Redis

Concept Descriptif
ConnectionMultiplexer Un pool de connexions Redis, sécurisé pour les threads et implémenté en singleton. Créez-le une fois et réutilisez-le pour la durée de vie de l’application.
IDatabase Interface pour l’exécution de commandes (StringGet, StringSet, HashGetet ainsi de suite).
Format du point de terminaison endpoint:10000 (TLS) pour Azure Managed Redis.

Exécution de l’exemple

az login
cd sample
dotnet run

Entrez votre point de terminaison Redis (par exemple, <your-redis-name>.<region>.redis.azure.net:10000), choisissez la méthode d’authentification 1 (DefaultAzureCredential) et regardez les + caractères imprimer chaque seconde à mesure que les commandes réussissent. Laissez-le s’exécuter pendant plus de 60 minutes pour vérifier que l’actualisation automatique des jetons fonctionne.

Considérations relatives à la production

Réglage Valeur d'échantillon Valeur de production
AbortOnConnectFail true false (réessayez au démarrage)
BacklogPolicy FailFast Default (commandes de file d’attente pendant les échecs temporaires)
Durée de vie de la connexion Boucle de démonstration Singleton via DI (IConnectionMultiplexer)

Cet exemple fournit une implémentation de référence complète pour l’authentification d’ID Entra sans mot de passe sécurisée dans toute application .NET qui utilise Azure Managed Redis.