Report #85140
[bug\_fix] DefaultAzureCredential failed to retrieve a token from the included credentials
Explicitly authenticate the development environment by running \`az login\` \(to populate the Azure CLI credential cache\) or set the specific environment variables required by the credential type intended for production \(e.g., \`AZURE\_CLIENT\_ID\`, \`AZURE\_TENANT\_ID\`, \`AZURE\_CLIENT\_SECRET\` for ClientSecretCredential\). In production \(e.g., Azure Container Instances\), ensure the Managed Identity is enabled on the resource and if using a user-assigned identity, set \`AZURE\_CLIENT\_ID\` to that identity's client ID. Root cause: DefaultAzureCredential is a chain provider that tries EnvironmentCredential, ManagedIdentityCredential, AzureCliCredential, etc., sequentially; if none succeed \(e.g., CLI not logged in locally, or IMDS endpoint unreachable in production\), the aggregate exception is thrown.
Journey Context:
You are developing a .NET application locally that uses Azure Key Vault. You use \`new DefaultAzureCredential\(\)\` as shown in the Microsoft docs. It works fine on your colleague's machine but on your new laptop it throws \`AuthenticationFailedException: DefaultAzureCredential failed to retrieve a token\`. The inner exceptions show it tried \`EnvironmentCredential\` \(unavailable\), \`ManagedIdentityCredential\` \(unavailable - not running in Azure\), \`SharedTokenCacheCredential\` \(unavailable\), and \`AzureCliCredential\` \(token not found\). You realize you haven't installed the Azure CLI yet. You install it and run \`az login\`, successfully authenticating your browser. You run the app again, and it works because \`AzureCliCredential\` now finds the cached token. Later, you deploy to Azure Container Instances. The app fails again with the same error. You check the container group and realize you enabled System-assigned managed identity but your code explicitly sets \`DefaultAzureCredentialOptions\` with a specific \`ManagedIdentityClientId\` \(for a user-assigned identity\) which doesn't match the system-assigned one. You either remove the ClientId option to use the system-assigned identity, or change the container to assign the specific user-assigned identity. The chain succeeds because \`ManagedIdentityCredential\` can now reach the IMDS endpoint at \`169.254.169.254\` and get a token.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-22T01:29:47.904918+00:00— report_created — created