option
MaisonMaison Skill DevOps et CI/CD azure-identity-py

azure-identity-py

microsoft/skills microsoft/skills

Authentifiez-vous auprès des services Azure depuis Python à l'aide de Microsoft Entra ID, en utilisant DefaultAzureCredential, une identité gérée, des entités de service et la mise en cache des jetons.

...Développer tout
11
Heure mise à jour 12 septembre 2026

Bibliothèque Azure Identity pour Python

Bibliothèque d'authentification pour les clients SDK Azure utilisant Microsoft Entra ID.

Utilisez cette compétence lorsque :

  • Une application doit s'authentifier auprès des services Azure depuis Python
  • Vous avez besoin DefaultAzureCredential pour le développement local et le déploiement sur Azure
  • Vous avez besoin ManagedIdentityCredential pour les charges de travail hébergées sur Azure
  • Vous avez besoin d'une authentification par entité de service avec un secret ou un certificat
  • Vous devez obtenir un jeton directement avec get_token()
  • Vous devez résoudre les échecs de la chaîne d’informations d’identification

Installation

pip install azure-identity

Pour VS Code ou l'authentification de bureau via un courtier :

pip install azure-identity-broker

Version de Python

azure-identity Prise en charge de Python 3.9 et versions ultérieures.

Variables d’environnement

# Service principal with client secret
AZURE_TENANT_ID=
AZURE_CLIENT_ID=
AZURE_CLIENT_SECRET=

# Service principal with certificate
AZURE_TENANT_ID=
AZURE_CLIENT_ID=
AZURE_CLIENT_CERTIFICATE_PATH=/path/to/cert.pem
AZURE_CLIENT_CERTIFICATE_PASSWORD=

# Authority (sovereign clouds)
AZURE_AUTHORITY_HOST=login.microsoftonline.com  # Default; or login.chinacloudapi.cn, login.microsoftonline.us

# User-assigned managed identity
AZURE_CLIENT_ID=

# Credential selection (new)
AZURE_TOKEN_CREDENTIALS=dev|prod|  # Optional, restricts DAC chain

DefaultAzureCredential

Identifiants recommandés pour la plupart des scénarios. Tente plusieurs méthodes d’authentification dans l’ordre suivant :

from azure.identity import DefaultAzureCredential
from azure.storage.blob import BlobServiceClient

# Works in local dev AND production without code changes
credential = DefaultAzureCredential()

with BlobServiceClient(
    account_url="https://.blob.core.windows.net",
    credential=credential
) as client:
    containers = list(client.list_containers())

Ordre de la chaîne d’informations d’identification

Consultez la présentation de DefaultAzureCredential pour connaître l'ordre actuel de la chaîne d'informations d'identification et les valeurs par défaut.

Personnalisation de DefaultAzureCredential

# Exclude credentials you don't need
credential = DefaultAzureCredential(
    exclude_environment_credential=True,
    exclude_shared_token_cache_credential=True,
    managed_identity_client_id=""  # For user-assigned MI (also accepts object ID or resource ID)
)

# Enable interactive browser (disabled by default)
credential = DefaultAzureCredential(
    exclude_interactive_browser_credential=False
)

# Set subprocess timeout for CLI-based credentials (default: 10s)
credential = DefaultAzureCredential(process_timeout=30)

# Require AZURE_TOKEN_CREDENTIALS env var to be set
credential = DefaultAzureCredential(require_envvar=True)

Exclure des paramètres

Paramètre Valeur par défaut Effet
exclude_environment_credential Faux Ignorer l'authentification basée sur les variables d'environnement
exclude_workload_identity_credential Faux Ignorer l'identité de la charge de travail Kubernetes
exclude_managed_identity_credential Faux Ignorer l'identité gérée
exclude_shared_token_cache_credential Faux Ignorer le cache de jetons partagé
exclude_visual_studio_code_credential Faux Ignorer les informations d'identification VS Code
exclude_cli_credential Faux Ignorer l'interface CLI d'Azure
exclude_powershell_credential Faux Ignorer Azure PowerShell
exclude_developer_cli_credential Faux Ignorer Azure Developer CLI
exclude_interactive_browser_credential Vrai Ignorer le navigateur interactif
exclude_broker_credential Faux Ignorer le courtier WAM

get_bearer_token_provider

Aide qui encapsule des informations d’identification dans une fonction appelable renvoyant une chaîne de caractères représentant un jeton « bearer ». Indispensable pour le SDK OpenAI et d’autres clients n’utilisant pas le SDK Azure :

from azure.identity import DefaultAzureCredential, get_bearer_token_provider

credential = DefaultAzureCredential()
token_provider = get_bearer_token_provider(
    credential, "https://cognitiveservices.azure.com/.default"
)

# Use with OpenAI SDK
from openai import AzureOpenAI

with AzureOpenAI(
    azure_endpoint="https://.openai.azure.com/",
    azure_ad_token_provider=token_provider,
    api_version="2024-10-21",
) as client:
    # response = client.chat.completions.create(...)
    ...

Types d’identifiants

Chaînes d’informations d’identification

Identifiant Cas d’utilisation
DefaultAzureCredential La plupart des scénarios — détecte automatiquement l’environnement
ChainedTokenCredential Chaîne d’informations d’identification personnalisée avec ordre explicite

Applications hébergées sur Azure

Identifiants Cas d'utilisation
EnvironmentCredential Authentification via les variables d’environnement AZURE_CLIENT_SECRET / AZURE_CLIENT_CERTIFICATE_PATH
ManagedIdentityCredential Machines virtuelles Azure, App Service, Functions, AKS, Arc, Service Fabric
WorkloadIdentityCredential Kubernetes avec Microsoft Entra Workload ID

Entités de service

Identifiants Cas d’utilisation
ClientSecretCredential Entité de service avec secret client
CertificateCredential Entité de service avec certificat PEM/PKCS12
ClientAssertionCredential Entité de service avec assertion JWT signée
AzurePipelinesCredential Azure Pipelines avec fédération d'identités de charge de travail
OnBehalfOfCredential Flux « au nom de » au niveau intermédiaire (identité utilisateur déléguée)

Authentification des utilisateurs

Identifiants Cas d'utilisation
InteractiveBrowserCredential Connexion OAuth interactive via un navigateur
DeviceCodeCredential Flux de code pour appareil sans interface utilisateur/SSH
AuthorizationCodeCredential Code d’autorisation obtenu précédemment

Outils de développement

Identifiants Cas d'utilisation
AzureCliCredential az login
AzureDeveloperCliCredential azd auth login
AzurePowerShellCredential Connect-AzAccount
VisualStudioCodeCredential Extension « Azure Resources » de VS Code

Exemples d’identifiants spécifiques

ManagedIdentityCredential

Pour les ressources hébergées sur Azure (machines virtuelles, App Service, Functions, AKS) :

from azure.identity import ManagedIdentityCredential

# System-assigned managed identity
credential = ManagedIdentityCredential()

# User-assigned managed identity (client_id, object_id, or resource_id)
credential = ManagedIdentityCredential(
    client_id=""
)
# Also valid:
# credential = ManagedIdentityCredential(object_id="")
# credential = ManagedIdentityCredential(resource_id="")

ClientSecretCredential

import os
from azure.identity import ClientSecretCredential

credential = ClientSecretCredential(
    tenant_id=os.environ["AZURE_TENANT_ID"],
    client_id=os.environ["AZURE_CLIENT_ID"],
    client_secret=os.environ["AZURE_CLIENT_SECRET"],
)

CertificateCredential

Remarque : la classe est CertificateCredential, et NON ClientCertificateCredential.

from azure.identity import CertificateCredential

# From file path
credential = CertificateCredential(
    tenant_id="",
    client_id="",
    certificate_path="/path/to/cert.pem",
)

# From bytes with password
credential = CertificateCredential(
    tenant_id="",
    client_id="",
    certificate_data=cert_bytes,
    password="",
    send_certificate_chain=True,  # Required for SNI auth
)

AzureCliCredential

from azure.identity import AzureCliCredential

credential = AzureCliCredential()
# With tenant restriction
credential = AzureCliCredential(tenant_id="")

ChainedTokenCredential

Chaîne d’identifiants personnalisée :

from azure.identity import (
    ChainedTokenCredential,
    ManagedIdentityCredential,
    AzureCliCredential,
)

# Try managed identity first, fall back to CLI
credential = ChainedTokenCredential(
    ManagedIdentityCredential(client_id=""),
    AzureCliCredential(),
)

WorkloadIdentityCredential

Pour Azure Kubernetes Service avec identité de charge de travail :

from azure.identity import WorkloadIdentityCredential

# Reads from AZURE_TENANT_ID, AZURE_CLIENT_ID, AZURE_FEDERATED_TOKEN_FILE
credential = WorkloadIdentityCredential()

# Or explicit configuration
credential = WorkloadIdentityCredential(
    tenant_id="",
    client_id="",
    token_file_path="/var/run/secrets/azure/tokens/azure-identity-token",
)

DeviceCodeCredential

Pour les appareils sans interface graphique (IoT, SSH, outils CLI) :

from azure.identity import DeviceCodeCredential

credential = DeviceCodeCredential()
# Prints device code prompt to stdout by default

# With custom prompt callback
def prompt_callback(verification_uri, user_code, expires_on):
    print(f"Go to {verification_uri} and enter code {user_code}")

credential = DeviceCodeCredential(
    client_id="",
    prompt_callback=prompt_callback,
)

InteractiveBrowserCredential

Pour la connexion interactive via un navigateur OAuth :

from azure.identity import InteractiveBrowserCredential

credential = InteractiveBrowserCredential()

# With specific tenant and client
credential = InteractiveBrowserCredential(
    tenant_id="",
    client_id="",
)

OnBehalfOfCredential

Pour les services de couche intermédiaire transmettant l'identité de l'utilisateur :

from azure.identity import OnBehalfOfCredential

credential = OnBehalfOfCredential(
    tenant_id="",
    client_id="",
    client_secret="",
    user_assertion="",
)

AzurePipelinesCredential

Pour les pipelines Azure DevOps avec fédération d'identité des charges de travail :

import os
from azure.identity import AzurePipelinesCredential

credential = AzurePipelinesCredential(
    tenant_id="",
    client_id="",
    service_connection_id="",
    system_access_token=os.environ["SYSTEM_ACCESSTOKEN"],
)

Obtenir des jetons directement

from azure.identity import DefaultAzureCredential

with DefaultAzureCredential() as credential:
    # Get token for a specific scope
    token = credential.get_token("https://management.azure.com/.default")
    print(f"Token expires: {token.expires_on}")

    # For Azure Database for PostgreSQL
    token = credential.get_token("https://ossrdbms-aad.database.windows.net/.default")

Identifiants asynchrones

Les informations d’identification asynchrones se trouvent dans azure.identity.aio. Veillez à toujours les fermer ou à utiliser async with:

from azure.identity.aio import DefaultAzureCredential
from azure.storage.blob.aio import BlobServiceClient

async def main():
    # Preferred: use async context manager for both credential and client
    async with DefaultAzureCredential() as credential:
        async with BlobServiceClient(
            account_url="https://.blob.core.windows.net",
            credential=credential,
        ) as client:
            # ... async operations
            pass

Le get_bearer_token_provider se trouve à l’adresse azure.identity.aio.get_bearer_token_provider.

Sovereign Clouds

Utilisez AzureAuthorityHosts ou la AZURE_AUTHORITY_HOST variable d’environnement :

from azure.identity import DefaultAzureCredential, AzureAuthorityHosts

# Azure Government
credential = DefaultAzureCredential(authority=AzureAuthorityHosts.AZURE_GOVERNMENT)

# Azure China
credential = DefaultAzureCredential(authority=AzureAuthorityHosts.AZURE_CHINA)
Constante Autorité
AzureAuthorityHosts.AZURE_PUBLIC_CLOUD login.microsoftonline.com (par défaut)
AzureAuthorityHosts.AZURE_GOVERNMENT login.microsoftonline.us
AzureAuthorityHosts.AZURE_CHINA login.chinacloudapi.cn

Mise en cache persistante des jetons

Mise en cache sur disque activable avec TokenCachePersistenceOptions:

from azure.identity import DefaultAzureCredential, TokenCachePersistenceOptions

credential = DefaultAzureCredential(
    cache_persistence_options=TokenCachePersistenceOptions()
)

# Allow unencrypted fallback (NOT recommended for production)
credential = DefaultAzureCredential(
    cache_persistence_options=TokenCachePersistenceOptions(allow_unencrypted_storage=True)
)

stockage : Windows (DPAPI), macOS (Keychain), Linux (Keyring).

Prise en charge multi-locataires

Autoriser l’acquisition de jetons pour des locataires supplémentaires en plus de celui configuré :

from azure.identity import ClientSecretCredential

credential = ClientSecretCredential(
    tenant_id="",
    client_id="",
    client_secret="",
    additionally_allowed_tenants=["", "*"],  # "*" allows any tenant
)

Gestion des erreurs

from azure.identity import DefaultAzureCredential, CredentialUnavailableError
from azure.core.exceptions import ClientAuthenticationError

with DefaultAzureCredential() as credential:
    try:
        token = credential.get_token("https://management.azure.com/.default")
    except CredentialUnavailableError:
        # No credential in the chain could attempt authentication
        pass
    except ClientAuthenticationError as e:
        # Authentication was attempted but failed
        # e.message contains details from each credential in the chain
        pass

Journalisation

Activer la journalisation de l'authentification à des fins de débogage :

import logging

# Enable verbose Azure Identity logging
logging.basicConfig(level=logging.DEBUG)
logger = logging.getLogger("azure.identity")
logger.setLevel(logging.DEBUG)
# Or via environment variable
AZURE_LOG_LEVEL=debug

Matrice de sélection des identifiants

Environnement Identifiants recommandés
Développement local DefaultAzureCredential (utilise l'interface CLI d'Azure)
Azure App Service DefaultAzureCredential (utilise l'identité gérée)
Azure Functions DefaultAzureCredential (utilise l'identité gérée)
Azure Kubernetes Service WorkloadIdentityCredential
Machines virtuelles Azure DefaultAzureCredential (utilise l'identité gérée)
Pipeline CI/CD EnvironmentCredential ou AzurePipelinesCredential
Application de bureau InteractiveBrowserCredential
CLI / Outil sans interface graphique DeviceCodeCredential
Service de couche intermédiaire OnBehalfOfCredential

Meilleures pratiques

  1. Choisissez la synchronisation OU l'asynchronisation et restez cohérent. Ne mélangez pas azure.xxx les clients synchrones avec azure.xxx.aio des clients asynchrones dans un même chemin d’appel. Choisissez un seul mode par module.
  2. Utilisez les identifiants comme gestionnaires de contexte (with DefaultAzureCredential() as credential:) lorsqu’ils possèdent des caches de jetons ou des transports HTTP que vous souhaitez nettoyer ; pour le mode asynchrone, utilisez async with les identifiants de azure.identity.aio.
  3. Utilisez DefaultAzureCredential pour le code s’exécutant localement. Utilisez un identifiant de token spécifique pour le code s’exécutant sur Azure.
  4. Ne codez jamais les identifiants en dur — utilisez des variables d’environnement ou une identité gérée
  5. Privilégiez les identités gérées dans les déploiements Azure en production
  6. Utilisez get_bearer_token_provider pour les clients n’utilisant pas le SDK Azure (OpenAI, API REST)
  7. Utilisez ChainedTokenCredential lorsque vous avez besoin d’un ordre d’identifiants personnalisé
  8. Définissez AZURE_CLIENT_ID pour les identités gérées attribuées par l’utilisateur (l’ID d’objet et l’ID de ressource sont également des identifiants valides)
  9. Excluez les informations d’identification inutilisées pour accélérer l’ DefaultAzureCredential l’authentification
  10. Utilisez `CertificateCredential` (et non ClientCertificateCredential — ce nom n’existe pas)
  11. Activer l’cache_persistence_options pour les services à exécution prolongée afin de réduire les demandes de jetons
  12. Réutilisez les instances d’identifiants — un même identifiant peut être partagé entre plusieurs clients

Liens de référence

Ressource URL
Paquet PyPI https://pypi.org/project/azure-identity/
Référence API https://learn.microsoft.com/python/api/azure-identity
Code source GitHub https://github.com/Azure/azure-sdk-for-python/tree/main/sdk/identity/azure-identity
Chaînes d'informations d'identification https://aka.ms/azsdk/python/identity/credential-chains
Voir sur GitHub
---
name: azure-identity-py
description: Authenticate to Azure services from Python using Microsoft Entra ID with DefaultAzureCredential, managed identity, service principals, and token caching.
license: MIT
---

# Azure Identity library for Python

Authentication library for Azure SDK clients using Microsoft Entra ID.

Use this skill when:
- An app needs to authenticate to Azure services from Python
- You need `DefaultAzureCredential` for local dev + Azure deployment
- You need `ManagedIdentityCredential` for Azure-hosted workloads
- You need service principal auth with secret or certificate
- You need direct token acquisition with `get_token()`
- You need to troubleshoot credential chain failures

## Installation

```bash
pip install azure-identity
```

For VS Code or broker-based desktop auth:

```bash
pip install azure-identity-broker
```

## Python Version

`azure-identity` supports Python 3.9+.

## Environment Variables

```bash
# Service principal with client secret
AZURE_TENANT_ID=<your-tenant-id>
AZURE_CLIENT_ID=<your-client-id>
AZURE_CLIENT_SECRET=<your-client-secret>

# Service principal with certificate
AZURE_TENANT_ID=<your-tenant-id>
AZURE_CLIENT_ID=<your-client-id>
AZURE_CLIENT_CERTIFICATE_PATH=/path/to/cert.pem
AZURE_CLIENT_CERTIFICATE_PASSWORD=<optional-password>

# Authority (sovereign clouds)
AZURE_AUTHORITY_HOST=login.microsoftonline.com  # Default; or login.chinacloudapi.cn, login.microsoftonline.us

# User-assigned managed identity
AZURE_CLIENT_ID=<managed-identity-client-id>

# Credential selection (new)
AZURE_TOKEN_CREDENTIALS=dev|prod|<credential-name>  # Optional, restricts DAC chain
```

## DefaultAzureCredential

The recommended credential for most scenarios. Tries multiple authentication methods in order:

```python
from azure.identity import DefaultAzureCredential
from azure.storage.blob import BlobServiceClient

# Works in local dev AND production without code changes
credential = DefaultAzureCredential()

with BlobServiceClient(
    account_url="https://<account>.blob.core.windows.net",
    credential=credential
) as client:
    containers = list(client.list_containers())
```

### Credential Chain Order

See [DefaultAzureCredential overview](https://aka.ms/azsdk/python/identity/credential-chains#defaultazurecredential-overview) for the current credential chain order and defaults.

### Customizing DefaultAzureCredential

```python
# Exclude credentials you don't need
credential = DefaultAzureCredential(
    exclude_environment_credential=True,
    exclude_shared_token_cache_credential=True,
    managed_identity_client_id="<user-assigned-mi-client-id>"  # For user-assigned MI (also accepts object ID or resource ID)
)

# Enable interactive browser (disabled by default)
credential = DefaultAzureCredential(
    exclude_interactive_browser_credential=False
)

# Set subprocess timeout for CLI-based credentials (default: 10s)
credential = DefaultAzureCredential(process_timeout=30)

# Require AZURE_TOKEN_CREDENTIALS env var to be set
credential = DefaultAzureCredential(require_envvar=True)
```

### Exclude Parameters

| Parameter | Default | Effect |
|-----------|---------|--------|
| `exclude_environment_credential` | False | Skip env-var-based auth |
| `exclude_workload_identity_credential` | False | Skip Kubernetes workload identity |
| `exclude_managed_identity_credential` | False | Skip managed identity |
| `exclude_shared_token_cache_credential` | False | Skip shared token cache |
| `exclude_visual_studio_code_credential` | False | Skip VS Code credential |
| `exclude_cli_credential` | False | Skip Azure CLI |
| `exclude_powershell_credential` | False | Skip Azure PowerShell |
| `exclude_developer_cli_credential` | False | Skip Azure Developer CLI |
| `exclude_interactive_browser_credential` | **True** | Skip interactive browser |
| `exclude_broker_credential` | False | Skip WAM broker |

## get_bearer_token_provider

Helper that wraps a credential into a callable returning a bearer token string. Essential for OpenAI SDK and other non-Azure-SDK clients:

```python
from azure.identity import DefaultAzureCredential, get_bearer_token_provider

credential = DefaultAzureCredential()
token_provider = get_bearer_token_provider(
    credential, "https://cognitiveservices.azure.com/.default"
)

# Use with OpenAI SDK
from openai import AzureOpenAI

with AzureOpenAI(
    azure_endpoint="https://<resource>.openai.azure.com/",
    azure_ad_token_provider=token_provider,
    api_version="2024-10-21",
) as client:
    # response = client.chat.completions.create(...)
    ...
```

## Credential Types

### Credential Chains

| Credential | Use Case |
|------------|----------|
| `DefaultAzureCredential` | Most scenarios — auto-detects environment |
| `ChainedTokenCredential` | Custom credential chain with explicit ordering |

### Azure-Hosted Applications

| Credential | Use Case |
|------------|----------|
| `EnvironmentCredential` | Auth via AZURE_CLIENT_SECRET / AZURE_CLIENT_CERTIFICATE_PATH env vars |
| `ManagedIdentityCredential` | Azure VMs, App Service, Functions, AKS, Arc, Service Fabric |
| `WorkloadIdentityCredential` | Kubernetes with Microsoft Entra Workload ID |

### Service Principals

| Credential | Use Case |
|------------|----------|
| `ClientSecretCredential` | Service principal with client secret |
| `CertificateCredential` | Service principal with PEM/PKCS12 certificate |
| `ClientAssertionCredential` | Service principal with signed JWT assertion |
| `AzurePipelinesCredential` | Azure Pipelines with workload identity federation |
| `OnBehalfOfCredential` | Middle-tier on-behalf-of flow (delegated user identity) |

### User Authentication

| Credential | Use Case |
|------------|----------|
| `InteractiveBrowserCredential` | Interactive browser OAuth sign-in |
| `DeviceCodeCredential` | Headless/SSH device code flow |
| `AuthorizationCodeCredential` | Previously obtained authorization code |

### Developer Tools

| Credential | Use Case |
|------------|----------|
| `AzureCliCredential` | `az login` |
| `AzureDeveloperCliCredential` | `azd auth login` |
| `AzurePowerShellCredential` | `Connect-AzAccount` |
| `VisualStudioCodeCredential` | VS Code Azure Resources extension |

## Specific Credential Examples

### ManagedIdentityCredential

For Azure-hosted resources (VMs, App Service, Functions, AKS):

```python
from azure.identity import ManagedIdentityCredential

# System-assigned managed identity
credential = ManagedIdentityCredential()

# User-assigned managed identity (client_id, object_id, or resource_id)
credential = ManagedIdentityCredential(
    client_id="<user-assigned-mi-client-id>"
)
# Also valid:
# credential = ManagedIdentityCredential(object_id="<object-id>")
# credential = ManagedIdentityCredential(resource_id="<resource-id>")
```

### ClientSecretCredential

```python
import os
from azure.identity import ClientSecretCredential

credential = ClientSecretCredential(
    tenant_id=os.environ["AZURE_TENANT_ID"],
    client_id=os.environ["AZURE_CLIENT_ID"],
    client_secret=os.environ["AZURE_CLIENT_SECRET"],
)
```

### CertificateCredential

> **Note:** The class is `CertificateCredential`, NOT `ClientCertificateCredential`.

```python
from azure.identity import CertificateCredential

# From file path
credential = CertificateCredential(
    tenant_id="<tenant-id>",
    client_id="<client-id>",
    certificate_path="/path/to/cert.pem",
)

# From bytes with password
credential = CertificateCredential(
    tenant_id="<tenant-id>",
    client_id="<client-id>",
    certificate_data=cert_bytes,
    password="<cert-password>",
    send_certificate_chain=True,  # Required for SNI auth
)
```

### AzureCliCredential

```python
from azure.identity import AzureCliCredential

credential = AzureCliCredential()
# With tenant restriction
credential = AzureCliCredential(tenant_id="<tenant-id>")
```

### ChainedTokenCredential

Custom credential chain:

```python
from azure.identity import (
    ChainedTokenCredential,
    ManagedIdentityCredential,
    AzureCliCredential,
)

# Try managed identity first, fall back to CLI
credential = ChainedTokenCredential(
    ManagedIdentityCredential(client_id="<user-assigned-mi-client-id>"),
    AzureCliCredential(),
)
```

### WorkloadIdentityCredential

For Azure Kubernetes Service with workload identity:

```python
from azure.identity import WorkloadIdentityCredential

# Reads from AZURE_TENANT_ID, AZURE_CLIENT_ID, AZURE_FEDERATED_TOKEN_FILE
credential = WorkloadIdentityCredential()

# Or explicit configuration
credential = WorkloadIdentityCredential(
    tenant_id="<tenant-id>",
    client_id="<client-id>",
    token_file_path="/var/run/secrets/azure/tokens/azure-identity-token",
)
```

### DeviceCodeCredential

For headless devices (IoT, SSH, CLI tools):

```python
from azure.identity import DeviceCodeCredential

credential = DeviceCodeCredential()
# Prints device code prompt to stdout by default

# With custom prompt callback
def prompt_callback(verification_uri, user_code, expires_on):
    print(f"Go to {verification_uri} and enter code {user_code}")

credential = DeviceCodeCredential(
    client_id="<client-id>",
    prompt_callback=prompt_callback,
)
```

### InteractiveBrowserCredential

For interactive OAuth browser sign-in:

```python
from azure.identity import InteractiveBrowserCredential

credential = InteractiveBrowserCredential()

# With specific tenant and client
credential = InteractiveBrowserCredential(
    tenant_id="<tenant-id>",
    client_id="<client-id>",
)
```

### OnBehalfOfCredential

For middle-tier services propagating user identity:

```python
from azure.identity import OnBehalfOfCredential

credential = OnBehalfOfCredential(
    tenant_id="<tenant-id>",
    client_id="<client-id>",
    client_secret="<client-secret>",
    user_assertion="<access-token-from-client>",
)
```

### AzurePipelinesCredential

For Azure DevOps pipelines with workload identity federation:

```python
import os
from azure.identity import AzurePipelinesCredential

credential = AzurePipelinesCredential(
    tenant_id="<tenant-id>",
    client_id="<client-id>",
    service_connection_id="<service-connection-id>",
    system_access_token=os.environ["SYSTEM_ACCESSTOKEN"],
)
```

## Getting Tokens Directly

```python
from azure.identity import DefaultAzureCredential

with DefaultAzureCredential() as credential:
    # Get token for a specific scope
    token = credential.get_token("https://management.azure.com/.default")
    print(f"Token expires: {token.expires_on}")

    # For Azure Database for PostgreSQL
    token = credential.get_token("https://ossrdbms-aad.database.windows.net/.default")
```

## Async Credentials

Async credentials are in `azure.identity.aio`. Always close them or use `async with`:

```python
from azure.identity.aio import DefaultAzureCredential
from azure.storage.blob.aio import BlobServiceClient

async def main():
    # Preferred: use async context manager for both credential and client
    async with DefaultAzureCredential() as credential:
        async with BlobServiceClient(
            account_url="https://<account>.blob.core.windows.net",
            credential=credential,
        ) as client:
            # ... async operations
            pass
```

> The async `get_bearer_token_provider` is at `azure.identity.aio.get_bearer_token_provider`.

## Sovereign Clouds

Use `AzureAuthorityHosts` or the `AZURE_AUTHORITY_HOST` env var:

```python
from azure.identity import DefaultAzureCredential, AzureAuthorityHosts

# Azure Government
credential = DefaultAzureCredential(authority=AzureAuthorityHosts.AZURE_GOVERNMENT)

# Azure China
credential = DefaultAzureCredential(authority=AzureAuthorityHosts.AZURE_CHINA)
```

| Constant | Authority |
|----------|-----------|
| `AzureAuthorityHosts.AZURE_PUBLIC_CLOUD` | `login.microsoftonline.com` (default) |
| `AzureAuthorityHosts.AZURE_GOVERNMENT` | `login.microsoftonline.us` |
| `AzureAuthorityHosts.AZURE_CHINA` | `login.chinacloudapi.cn` |

## Persistent Token Caching

Opt-in disk-based caching with `TokenCachePersistenceOptions`:

```python
from azure.identity import DefaultAzureCredential, TokenCachePersistenceOptions

credential = DefaultAzureCredential(
    cache_persistence_options=TokenCachePersistenceOptions()
)

# Allow unencrypted fallback (NOT recommended for production)
credential = DefaultAzureCredential(
    cache_persistence_options=TokenCachePersistenceOptions(allow_unencrypted_storage=True)
)
```

Storage: Windows (DPAPI), macOS (Keychain), Linux (Keyring).

## Multi-Tenant Support

Allow token acquisition for additional tenants beyond the configured one:

```python
from azure.identity import ClientSecretCredential

credential = ClientSecretCredential(
    tenant_id="<home-tenant>",
    client_id="<client-id>",
    client_secret="<secret>",
    additionally_allowed_tenants=["<other-tenant>", "*"],  # "*" allows any tenant
)
```

## Error Handling

```python
from azure.identity import DefaultAzureCredential, CredentialUnavailableError
from azure.core.exceptions import ClientAuthenticationError

with DefaultAzureCredential() as credential:
    try:
        token = credential.get_token("https://management.azure.com/.default")
    except CredentialUnavailableError:
        # No credential in the chain could attempt authentication
        pass
    except ClientAuthenticationError as e:
        # Authentication was attempted but failed
        # e.message contains details from each credential in the chain
        pass
```

## Logging

Enable authentication logging for debugging:

```python
import logging

# Enable verbose Azure Identity logging
logging.basicConfig(level=logging.DEBUG)
logger = logging.getLogger("azure.identity")
logger.setLevel(logging.DEBUG)
```

```bash
# Or via environment variable
AZURE_LOG_LEVEL=debug
```

## Credential Selection Matrix

| Environment | Recommended Credential |
|-------------|------------------------|
| Local Development | `DefaultAzureCredential` (uses Azure CLI) |
| Azure App Service | `DefaultAzureCredential` (uses Managed Identity) |
| Azure Functions | `DefaultAzureCredential` (uses Managed Identity) |
| Azure Kubernetes Service | `WorkloadIdentityCredential` |
| Azure VMs | `DefaultAzureCredential` (uses Managed Identity) |
| CI/CD Pipeline | `EnvironmentCredential` or `AzurePipelinesCredential` |
| Desktop App | `InteractiveBrowserCredential` |
| CLI / Headless Tool | `DeviceCodeCredential` |
| Middle-tier Service | `OnBehalfOfCredential` |

## Best Practices

1. **Pick sync OR async and stay consistent.** Do not mix `azure.xxx` sync clients with `azure.xxx.aio` async clients in the same call path. Choose one mode per module.
2. **Use credentials as context managers** (`with DefaultAzureCredential() as credential:`) when they own token caches / HTTP transports you want cleaned up; for async, use `async with` on credentials from `azure.identity.aio`.
3. **Use `DefaultAzureCredential`** for code that runs locally. Use a specific token credential for code that runs in Azure.
4. **Never hardcode credentials** — use environment variables or managed identity
5. **Prefer managed identity** in production Azure deployments
6. **Use `get_bearer_token_provider`** for non-Azure-SDK clients (OpenAI, REST APIs)
7. **Use `ChainedTokenCredential`** when you need a custom credential order
8. **Set `AZURE_CLIENT_ID`** for user-assigned managed identities (object ID and resource ID are also valid identifiers)
9. **Exclude unused credentials** to speed up `DefaultAzureCredential` authentication
10. **Use `CertificateCredential`** (not `ClientCertificateCredential` — that name doesn't exist)
11. **Enable `cache_persistence_options`** for long-running services to reduce token requests
12. **Reuse credential instances** — same credential can be shared across multiple clients

## Reference Links

| Resource | URL |
|----------|-----|
| PyPI Package | https://pypi.org/project/azure-identity/ |
| API Reference | https://learn.microsoft.com/python/api/azure-identity |
| GitHub Source | https://github.com/Azure/azure-sdk-for-python/tree/main/sdk/identity/azure-identity |
| Credential Chains | https://aka.ms/azsdk/python/identity/credential-chains |

Tous les fichiers

1 fichiers

Installer azure-identity-py

Téléchargez et décompressez les fichiers de compétences dans votre répertoire .claude/skills/.

Télécharger le ZIP

Clonez le dépôt et copiez les fichiers de compétence dans votre projet.

git clone https://github.com/microsoft/skills/tree/main/.github/plugins/azure-sdk-python/skills/azure-identity-py # Copy SKILL.md to your .claude/skills/ directory

Copier Copier
Configuration rapide: Copiez le dossier de la compétence dans .claude/skills/ Claude détectera automatiquement la compétence et l'utilisera

Compétences similaires

Verification &amp; Quality Assurance
Heure mise à jour 29 juin 2026
base44-cli
Heure mise à jour 29 juin 2026
klingai-upgrade-migration
Heure mise à jour 3 juillet 2026
Railway CLI Management
Heure mise à jour 2 juillet 2026
OR