ManagedIdentityClient Classe

Cette API encapsule plusieurs back-ends d’identité managée : machine virtuelle, App Service, Azure Automation (Runbooks), fonction Azure, service Fabric et Azure Arc.

Il fournit également la prise en charge du cache de jetons.

Note

Cloud Shell prise en charge n’est pas implémentée dans cette classe.

Depuis msal Python 1.18 en mai 2022, il a été mis en œuvre dans

<xref:PublicClientApplication.acquire_token_interactive> via le modèle d’appel

PublicClientApplication(...). acquire_token_interactive(scopes=[...], prompt="none »).

Cela est approprié, car Cloud Shell génère un jeton avec

autorisations déléguées pour l’utilisateur final qui s’est connecté au Portail Azure

(comme ce qu’un PublicClientApplication fait),

pas un jeton avec des autorisations d’application pour une application.

Créez un client d’identité managée.

Recette 1 : Codez en dur une identité managée pour votre application :


   import msal, requests
   client = msal.ManagedIdentityClient(
       msal.UserAssignedManagedIdentity(client_id="foo"),
       http_client=requests.Session(),
       )
   token = client.acquire_token_for_client("resource")

Recette 2 : Écrire une fois, s’exécuter partout. Si vous utilisez une identité managée différente sur un déploiement différent, vous pouvez utiliser une variable d’environnement (par exemple, MY_MANAGED_IDENTITY_CONFIG) pour stocker un objet blob json comme {"ManagedIdentityIdType": "ClientId", "Id": "foo"} ou {"ManagedIdentityIdType": "SystemAssigned", "Id": null}. L’application suivante peut charger dynamiquement la configuration d’identité managée :


   import json, os, msal, requests
   config = os.getenv("MY_MANAGED_IDENTITY_CONFIG")
   assert config, "An ENV VAR with value should exist"
   client = msal.ManagedIdentityClient(
       json.loads(config),
       http_client=requests.Session(),
       )
   token = client.acquire_token_for_client("resource")

Constructeur

ManagedIdentityClient(managed_identity: dict | ManagedIdentity | SystemAssignedManagedIdentity | UserAssignedManagedIdentity, *, http_client, token_cache=None, http_cache=None, client_capabilities: List[str] | None = None)

Paramètres

Nom Description
managed_identity
Obligatoire

Il accepte une instance de SystemAssignedManagedIdentity ou UserAssignedManagedIdentity. Ils sont équivalents à une dictée avec une certaine forme, qui peut être chargée à partir d’un fichier de configuration JSON ou d’une var env.

http_client
Obligatoire

Objet client http. Par exemple, vous pouvez utiliser requests.Session(), éventuellement avec un comportement d’interruption exponentielle illustré dans cette recette :


   import msal, requests
   from requests.adapters import HTTPAdapter, Retry
   s = requests.Session()
   retries = Retry(total=3, backoff_factor=0.1, status_forcelist=[
       429, 500, 501, 502, 503, 504])
   s.mount('https://', HTTPAdapter(max_retries=retries))
   managed_identity = ...
   client = msal.ManagedIdentityClient(managed_identity, http_client=s)
token_cache
Obligatoire

Optional. Il accepte une <xref:msal.TokenCache> instance pour stocker des jetons. Il utilise par défaut un cache de jetons en mémoire.

http_cache
Obligatoire

Optional. Il a les mêmes caractéristiques que les

:p aramref :msal.ClientApplication.http_cache<<.

client_capabilities
Obligatoire

(facultatif) Autorise la configuration d’une ou plusieurs fonctionnalités clientes, par exemple ["CP1"].

La fonctionnalité cliente est destinée à informer le Plateforme d'identités Microsoft (STS) de ce que ce client est capable, afin que STS puisse décider d’activer certaines fonctionnalités.

Détails de l’implémentation : la fonctionnalité cliente dans Managed Identity est relayée as-is via xms_cc un paramètre sur le câble.

Paramètres de mot clé uniquement

Nom Description
http_client
Obligatoire
token_cache
Valeur par défaut: None
http_cache
Valeur par défaut: None
client_capabilities
Valeur par défaut: None

Méthodes

acquire_token_for_client

Acquérir un jeton pour l’identité managée.

Le résultat est automatiquement mis en cache. Les appels suivants effectuent automatiquement une recherche à partir du cache en premier.

Note

Problème connu : lorsqu’une machine virtuelle Azure n’a qu’une seule identité managée affectée par l’utilisateur,

et votre application spécifie d’utiliser l’identité managée affectée par le système,

Azure machine virtuelle peut toujours retourner un jeton pour votre identité affectée par l’utilisateur.

Il s’agit d’un comportement côté service qui ne peut pas être modifié par cette bibliothèque.

documentation sur les machines virtuelles Azure

acquire_token_for_client

Acquérir un jeton pour l’identité managée.

Le résultat est automatiquement mis en cache. Les appels suivants effectuent automatiquement une recherche à partir du cache en premier.

Note

Problème connu : lorsqu’une machine virtuelle Azure n’a qu’une seule identité managée affectée par l’utilisateur,

et votre application spécifie d’utiliser l’identité managée affectée par le système,

Azure machine virtuelle peut toujours retourner un jeton pour votre identité affectée par l’utilisateur.

Il s’agit d’un comportement côté service qui ne peut pas être modifié par cette bibliothèque.

documentation sur les machines virtuelles Azure

acquire_token_for_client(*, resource: str, claims_challenge: str | None = None)

Paramètres

Nom Description
resource
Obligatoire

Ressource pour laquelle le jeton est acquis.

claims_challenge
Obligatoire

Optional. Il s’agit d’une représentation sous forme de chaîne d’un objet JSON (qui contient des listes de revendications demandées).

L’administrateur client peut choisir de révoquer tous les jetons d’identité managée, puis une demande de revendications est retournée par la ressource cible, en tant que directive claims_challenge dans l’en-tête www-authenticate , même si le développeur de l’application n’a pas choisi la fonctionnalité cliente « CP1 ». Lors de la réception d’un claims_challenge, MSAL tente d’acquérir un nouveau jeton.

Paramètres de mot clé uniquement

Nom Description
resource
Obligatoire
claims_challenge
Valeur par défaut: None