Partager via


Chaînes d’informations d’identification dans la bibliothèque de client Azure Identity pour Go

La bibliothèque cliente Azure Identity fournit des identifiants, des types publics qui implémentent l’interface TokenCredential de la bibliothèque Azure Core. Un justificatif d'identité représente un flux d’authentification distinct pour obtenir un jeton d’accès à partir de l’ID Microsoft Entra. Ces informations d’identification peuvent être chaînées pour former une séquence ordonnée de mécanismes d’authentification à essayer.

Fonctionnement des informations d’identification chaînées

Au moment de l’exécution, une chaîne d’informations d’identification tente de s’authentifier à l’aide des premières informations d’identification de la séquence. Si ces informations d’identification ne parvient pas à acquérir un jeton d’accès, les informations d’identification suivantes de la séquence sont tentées, et ainsi de suite, jusqu’à ce qu’un jeton d’accès soit obtenu avec succès. Le diagramme de séquence suivant illustre ce comportement :

Diagramme montrant la séquence de chaîne d’informations d’identification.

Pourquoi utiliser des chaînes d'identifiants

Les informations d’identification chaînées peuvent offrir les avantages suivants :

  • de sensibilisation à l’environnement : sélectionne automatiquement les informations d’identification les plus appropriées en fonction de l’environnement dans lequel l’application s’exécute. Sans cela, vous devrez écrire du code comme suit :

    // Set up credential based on environment (Azure or local development)
    if os.Getenv("WEBSITE_HOSTNAME") != "" {
        clientID := azidentity.ClientID("abcd1234-...")
        opts := azidentity.ManagedIdentityCredentialOptions{ID: clientID}
        cred, err := azidentity.NewManagedIdentityCredential(&opts)
    
        if err != nil {
          // TODO: handle error
        }
    }
    else {
        // Use Azure CLI Credential
        credential, err = azidentity.NewAzureCLICredential(nil)
    
        if err != nil {
          // TODO: handle error
        }
    }
    
  • transitions transparentes: votre application peut passer du développement local à votre environnement de préproduction ou de production sans modifier le code d’authentification.

  • Amélioration de la résilience: inclut un mécanisme de secours qui passe aux informations d’identification suivantes lorsque le précédent ne parvient pas à acquérir un jeton d’accès.

Comment choisir un identifiant chaîné

Avec Go, il existe deux choix pour le chaînage des informations d’identification :

  • Utiliser une chaîne préconfigurée: utilisez la chaîne préconfigurée implémentée par le type de DefaultAzureCredential. Pour cette approche, consultez la section Présentation de DefaultAzureCredential.
  • Créer une chaîne d’informations d’identification personnalisée: commencez par une chaîne vide et incluez uniquement ce dont vous avez besoin. Pour cette approche, consultez la section Présentation de ChainedTokenCredential.

Vue d’ensemble de DefaultAzureCredential

DefaultAzureCredential est une chaîne d’informations d’identification préconfigurée et stricte. Il est conçu pour prendre en charge de nombreux environnements, ainsi que les flux d’authentification et les outils de développement les plus courants. Sous forme graphique, la chaîne sous-jacente ressemble à ceci :

Diagramme montrant le flux d’authentification DefaultAzureCredential.

L'ordre dans lequel DefaultAzureCredential tente des informations d’identification est le suivant.

JSON Informations d'identification Description
1 Environnement Lit une collection de variables d’environnement pour déterminer si un principal de service d’application (utilisateur d’application) est configuré pour l’application. Si c’est le cas, DefaultAzureCredential utilise ces valeurs pour authentifier l’application auprès d’Azure. Cette méthode est la plus souvent utilisée dans les environnements serveur, mais peut également être utilisée lors du développement localement.
2 Identité de charge de travail Si l’application est déployée sur un hôte Azure avec l’identité de charge de travail activée, authentifiez ce compte.
3 Identité gérée Si l’application est déployée sur un hôte Azure avec l’identité managée activée, authentifiez l’application auprès d’Azure à l’aide de cette identité managée.
4 Azure CLI Si le développeur s’est authentifié auprès d’Azure à l’aide de la commande az login d’Azure CLI, authentifiez l’application auprès d’Azure à l’aide de ce même compte.
5 Azure Developer CLI Si le développeur s’est authentifié auprès d’Azure à l’aide de la commande azd auth login azure Developer CLI, authentifiez-vous auprès de ce compte.

Dans sa forme la plus simple, vous pouvez utiliser la version sans paramètre de DefaultAzureCredential comme suit :

import (
    "github.com/Azure/azure-sdk-for-go/sdk/azidentity"
    "github.com/Azure/azure-sdk-for-go/sdk/storage/azblob"
    )

// create a credential
credential, err := azidentity.NewDefaultAzureCredential(nil)
if err != nil {
    // TODO: handle error
}

// create a Blob service client 
accountURL := "https://<my_account_name>.blob.core.windows.net"
client, err := azblob.NewClient(accountURL, credential, nil)
if err != nil {
    // TODO: handle error
}

Vue d’ensemble de ChainedTokenCredential

ChainedTokenCredential est une chaîne vide à laquelle vous ajoutez des informations d’identification pour répondre aux besoins de votre application. Par exemple:

managed, err := azidentity.NewManagedIdentityCredential(nil)
if err != nil {
  // handle error
}

azCLI, err := azidentity.NewAzureCLICredential(nil)
if err != nil {
  // handle error
}

chain, err := azidentity.NewChainedTokenCredential([]azcore.TokenCredential{managed, azCLI}, nil)
if err != nil {
  // handle error
}

L’exemple de code précédent crée une chaîne d’informations d’identification personnalisée composée de deux informations d’identification. ManagedIdentityCredential est tentée en premier, suivie de AzureCliCredential, si nécessaire. Sous forme graphique, la chaîne ressemble à ceci :

Diagramme montrant le flux d’authentification pour une instance ChainedTokenCredential composée d’informations d’identification d’identité managée et d’informations d’identification Azure CLI.

Conseil

Pour améliorer les performances, optimisez l’ordre des informations d’identification dans ChainedTokenCredential pour votre environnement de production. Les informations d’identification destinées à être utilisées dans l’environnement de développement local doivent être ajoutées en dernier.

Conseils d’utilisation pour DefaultAzureCredential

DefaultAzureCredential est sans aucun doute le moyen le plus simple de commencer avec la bibliothèque de client Azure Identity, mais avec cette commodité vient les compromis. Une fois que vous avez déployé votre application sur Azure, vous devez comprendre les exigences d’authentification de l’application. Pour cette raison, envisagez fortement de passer de DefaultAzureCredential à l’une des solutions suivantes :

  • Une implémentation spécifique d’informations d’identification, telle que ManagedIdentityCredential.
  • Implémentation ChainedTokenCredential simplifiée et optimisée pour l’environnement Azure dans lequel votre application s’exécute.

Voici pourquoi :

  • Problèmes de débogage : en cas d’échec de l’authentification, il peut être difficile de déboguer et d’identifier les informations d’identification incriminées. Vous devez activer la journalisation pour voir la progression d’une information d’identification à l’autre et l’état de réussite/échec de chacun d’entre elles. Pour plus d’informations, consultez Déboguer des informations d’identification chaînées.
  • surcharge de performances: le processus de tentative séquentielle de plusieurs informations d’identification peut introduire une surcharge de performances. Par exemple, lors de l’exécution sur un ordinateur de développement local, l’identité managée n’est pas disponible. Par conséquent, ManagedIdentityCredential échoue toujours dans l’environnement de développement local, sauf si elle est explicitement désactivée via sa propriété correspondante précédée du préfixe exclude.
  • comportement imprévisible: DefaultAzureCredential vérifie la présence de certaines variables d’environnement . Il est possible que quelqu’un puisse ajouter ou modifier ces variables d’environnement au niveau du système sur l’ordinateur hôte. Ces modifications s’appliquent globalement et modifient donc le comportement de DefaultAzureCredential au moment de l’exécution dans n’importe quelle application s’exécutant sur cet ordinateur.

Déboguer des informations d’identification chaînées

Pour diagnostiquer un problème inattendu ou comprendre ce que font les informations d’identification chaînées, activez la journalisation dans votre application. Optionnellement, filtrez les journaux pour ne conserver que ceux émis par la bibliothèque cliente Azure Identity. Par exemple:

import azlog "github.com/Azure/azure-sdk-for-go/sdk/azcore/log"
// print log output to stdout
azlog.SetListener(func(event azlog.Event, s string) {
    fmt.Println(s)
})
// include only azidentity credential logs
azlog.SetEvents(azidentity.EventAuthentication)

Pour obtenir des conseils sur la résolution des erreurs à partir de types d’informations d’identification spécifiques, consultez le guide de résolution des problèmes .