Utiliser une identité managée avec MSAL Node

Un défi courant pour les développeurs est la gestion des secrets, des informations d’identification, des certificats et des clés utilisés pour sécuriser la communication entre les services. Les identités managées dans Azure éliminent la nécessité pour les développeurs de gérer ces informations d’identification manuellement. MSAL Node prend en charge l’acquisition de jetons via le service d’identité managée lorsqu’il est utilisé avec des applications s’exécutant à l’intérieur d’une infrastructure Azure, par exemple :

Pour obtenir une liste complète, reportez-vous à Azure services qui peuvent utiliser des identités managées pour accéder à d’autres services.

Note

Les bibliothèques MSAL basées sur un navigateur n’offrent pas d’identité managée, car le navigateur n’est pas hébergé sur Azure.

Quel KIT DE développement logiciel (SDK) utiliser - Kit de développement logiciel (SDK) Azure ou MSAL ?

MsAL Node et Kit de développement logiciel (SDK) Azure autorisent l’acquisition de jetons via une identité managée. En interne, le SDK Azure utilise MSAL Node et fournit une API de plus haut niveau via ses abstractions DefaultAzureCredential et ManagedIdentityCredential.

Si votre application utilise déjà l’un des kits SDK, continuez à utiliser le même KIT SDK. Utilisez Kit de développement logiciel (SDK) Azure si vous écrivez une nouvelle application et prévoyez d'appeler d'autres ressources Azure, car ce KIT de développement logiciel (SDK) offre une meilleure expérience de développement en permettant à l'application de s'exécuter sur des machines de développement privées où l'identité managée n'existe pas. Envisagez d’utiliser MSAL si vous devez appeler d’autres API web en aval telles que Microsoft Graph ou votre propre API web.

Pour commencer et voir Azure Identité managée en action, vous pouvez utiliser l’un des exemples d’identité managée MSAL Node.

Comment utiliser des identités managées

Il existe deux types d’identités managées disponibles pour les développeurs : attribués par le système et affectés par l’utilisateur. Vous pouvez en savoir plus sur les différences dans l’article sur les types d’identité managée . MSAL Node prend en charge l’acquisition de jetons dans les deux cas.

Avant de pouvoir utiliser des identités managées à partir de MSAL Node, vous devez les activer pour les ressources qu’ils souhaitent utiliser via Azure CLI ou le portail Azure.

Pour les identités affectées par l’utilisateur et affectées par le système, les développeurs peuvent utiliser la ManagedIdentityApplication classe.

Identités managées attribuées par le système

Pour les identités managées affectées par le système, le développeur n’a pas besoin de transmettre d’informations supplémentaires lors de la création d’une instance de ManagedIdentityApplication, car il déduit automatiquement les métadonnées pertinentes relatives à l’identité affectée.

acquireToken est appelée avec la ressource pour laquelle acquérir un jeton, par exemple https://management.azure.com.

import {
    ManagedIdentityApplication,
    ManagedIdentityConfiguration,
    ManagedIdentityRequestParams,
    NodeSystemOptions,
    LoggerOptions,
    LogLevel,
    AuthenticationResult
} from "@azure/msal-node";

const config: ManagedIdentityConfiguration = {
    system: {
        loggerOptions: {
            logLevel: LogLevel.Verbose,
        } as LoggerOptions,
    } as NodeSystemOptions,
};

const systemAssignedManagedIdentityApplication: ManagedIdentityApplication =
    new ManagedIdentityApplication(config);

const managedIdentityRequestParams: ManagedIdentityRequestParams = {
    resource: "https://management.azure.com",
};

const response: AuthenticationResult =
    await systemAssignedManagedIdentityApplication.acquireToken(
        managedIdentityRequestParams
    );
console.log(response);

Identités managées attribuées par l’utilisateur

Pour les identités managées affectées par l’utilisateur, le développeur doit passer l’ID client, l’identificateur de ressource complet ou l’ID d’objet de l’identité managée lors de la création ManagedIdentityApplication.

Comme dans le cas des identités managées affectées au système, acquireToken est appelé avec la ressource afin d’obtenir un jeton.

import {
    ManagedIdentityApplication,
    ManagedIdentityConfiguration,
    ManagedIdentityIdParams,
    ManagedIdentityRequestParams,
    NodeSystemOptions,
    LoggerOptions,
    LogLevel,
    AuthenticationResult
} from "@azure/msal-node";

const managedIdentityIdParams: ManagedIdentityIdParams = {
    userAssignedClientId: "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
};

const config: ManagedIdentityConfiguration = {
    managedIdentityIdParams,
    system: {
        loggerOptions: {
            logLevel: LogLevel.Verbose,
        } as LoggerOptions,
    } as NodeSystemOptions,
};

const userAssignedManagedIdentityApplication: ManagedIdentityApplication =
    new ManagedIdentityApplication(config);

const managedIdentityRequestParams: ManagedIdentityRequestParams = {
    resource: "https://management.azure.com",
};

const response: AuthenticationResult =
    await userAssignedManagedIdentityApplication.acquireToken(
        managedIdentityRequestParams
    );
console.log(response);

Caching

MSAL Node met en cache en mémoire les jetons issus de l’identité managée. Il n’y a pas d’éviction, mais la mémoire n’est pas une préoccupation, car un nombre limité d’identités managées peut être défini. L’extensibilité du cache n’est pas prise en charge dans ce scénario, car les jetons ne doivent pas être partagés entre les machines.

Résolution des erreurs courantes

En cas d’échec des requêtes, la réponse d’erreur contient un ID de corrélation pouvant être utilisé pour le diagnostic et l’analyse des journaux. N’oubliez pas que les ID de corrélation générés dans MSAL ou transmis à MSAL sont différents de ceux retournés dans les réponses d’erreur du serveur, car MSAL ne peut pas transmettre l’ID de corrélation aux points de terminaison d’acquisition de jeton d’identité managée.

ManagedIdentityError — Code d’erreur : invalid_resource

Message d’erreur : la ressource fournie est une URL non valide.

Cette exception peut signifier que la ressource pour laquelle vous essayez d’acquérir un jeton n’est pas prise en charge ou est fournie à l’aide du format d’ID de ressource incorrect. Voici quelques exemples de formats d’ID de ressource corrects : https://management.azure.com/.default, https://management.azure.comet https://graph.microsoft.com.