azure-identity-py
Azure Identity SDK for Python authentication with Microsoft Entra ID. Use for DefaultAzureCredential, managed identity, service principals, and token caching. Triggers: "azure-identity", "DefaultAzureCredential", "authentication", "managed identity", "service principal", "credential".
Install / Use
npx skills add microsoft/skills --skill azure-identity-pyInstalls into whichever agent you are using.
SKILL.md
Installable skill definition
Quality Score
Category
Development & EngineeringSupported Platforms
Our assessment of azure-identity-py
azure-identity-py scores 95/100 on our quality scale, 370th of 3,481 Development & Engineering skills we index (top 11%).
Its SKILL.md is 17 KB long, well organised into 68 sections with 24 code examples: a thorough specification that gives an agent plenty to work with.
With 3,051 GitHub stars, it is one of the more widely adopted skills in the catalogue.
Maintenance, license and trust
- The repository was last updated 5 days ago, so azure-identity-py is actively maintained.
- It is released under the MIT license, a permissive license that allows use, modification and commercial use with attribution.
- Its trust signals score 100/100, with no cautions. These come from repository metadata, not a code audit — read the skill file before letting an agent act on it.
azure-identity-py compared with similar skills
All 4 of these similar skills score higher than azure-identity-py; compare them before choosing.
| Skill | Score | Stars | Updated | Format |
|---|---|---|---|---|
| azure-identity-py (this skill)by microsoft | 95 | 3.1k | 5d ago | SKILL.md |
| Agent-Reachby Panniantong | 100 | 86.1k | 13d ago | CLAUDE.md |
| headroomby headroomlabs-ai | 100 | 74.1k | today | CLAUDE.md |
| ai-job-searchby MadsLorentzen | 100 | 44.4k | today | CLAUDE.md |
| claude-howtoby luongnv89 | 100 | 41.7k | 2d ago | CLAUDE.md |
Frequently asked questions
- How do I install azure-identity-py?
- Run
npx skills add microsoft/skills --skill azure-identity-py. The install tabs above show the steps for each supported agent. - Which AI agents does azure-identity-py work with?
- It is written for Universal, as a SKILL.md file. Other agents that read the same format can often use it too.
- Is azure-identity-py safe to use?
- It is MIT-licensed and scores 100/100 on trust signals. Skills are instructions an agent will follow, so read the file before installing it and do not approve commands you do not understand.
- Is azure-identity-py still maintained?
- The repository was last updated 5 days ago, so azure-identity-py is actively maintained.
Skill content
View source on GitHubname: azure-identity-py description: | Azure Identity SDK for Python authentication with Microsoft Entra ID. Use for DefaultAzureCredential, managed identity, service principals, and token caching. Triggers: "azure-identity", "DefaultAzureCredential", "authentication", "managed identity", "service principal", "credential". license: MIT metadata: author: Microsoft version: "1.0.0" package: azure-identity
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
DefaultAzureCredentialfor local dev + Azure deployment - You need
ManagedIdentityCredentialfor 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
pip install azure-identity
For VS Code or broker-based desktop auth:
pip install azure-identity-broker
Python Version
azure-identity supports Python 3.9+.
Environment Variables
# 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
Authentication & Lifecycle
🔑 Two rules apply to every code sample below:
- Prefer
DefaultAzureCredential. It works locally (Azure CLI / VS Code / Developer CLI) and in Azure (managed identity, workload identity) with no code change. Avoid connection strings, account/API keys — they bypass Entra audit and rotation.
- Local dev:
DefaultAzureCredentialworks as-is.- Production: set
AZURE_TOKEN_CREDENTIALS=prod(orAZURE_TOKEN_CREDENTIALS=<specific_credential>) to constrain the credential chain to production-safe credentials.- Wrap credentials and clients in context managers when they own token caches / transports:
- Sync:
with DefaultAzureCredential() as credential:- Async:
async with DefaultAzureCredential() as credential:(fromazure.identity.aio)Snippets may abbreviate this setup, but production code should always follow both rules.
DefaultAzureCredential
The recommended credential for most scenarios. Tries multiple authentication methods in order:
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 for the current credential chain order and defaults.
Customizing DefaultAzureCredential
# 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:
from azure.identity import DefaultAzureCredential, get_bearer_token_provider
credential = DefaultAzureCredential()
token_provider = get_…[redacted](
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):
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
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, NOTClientCertificateCredential.
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
from azure.identity import AzureCliCredential
credential = AzureCliCredential()
# With tenant restriction
credential = AzureCliCredential(tenant_id="<tenant-id>")
ChainedTokenCredential
Custom credential chain:
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:
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…[redacted]",
)
DeviceCodeCredential
For headless devices (IoT, SSH, CLI tools):
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:
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:
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:
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
from azure.identity import DefaultAzureCredential
with DefaultAzureCredential() as credential:
# Get token for a specific scope
token = cred…[redacted]("https://management.azure.com/.default")
print(f"Token expires: {token.expires_on}")
# For Azure Database for PostgreSQL
token = cred…[redacted]("https://ossrdbms-aad.database.windows.net/.default")
Async Credentials
Async credentials are in azure.identity.aio. Always close them or use async with:
from azure.identity.aio import DefaultAzureCredential
from azure.storage.blob.aio import Blo
Truncated for display — read the full file on GitHub.
Related Skills
Agent-Reach
86.1kGive your AI agent eyes to see the entire internet. Read & search Twitter, Reddit, YouTube, GitHub, Bilibili, XiaoHongShu — one CLI, zero API fees.
headroom
74.1kCompress tool outputs, logs, files, and RAG chunks before they reach the LLM. 20% fewer tokens for coding agents, 60-95% fewer tokens for JSON, same answers. Library, proxy, MCP server.
ai-job-search
44.4kThe job search that runs on your machine. AI job application framework built on Claude Code: evaluate postings, tailor CVs, write cover letters, prep interviews. Fork it and own it.
claude-howto
41.7kA visual, example-driven guide to Claude Code — from basic concepts to advanced agents, with copy-paste templates that bring immediate value.
Languages
Trust signals
From repository metadata: license, adoption, age and documentation. Not a code audit — see the Safety scan above for what the skill file itself contains.
