BerriAI/litellm · error · ValueError
Azure OIDC provider returned None token
Error message
Azure OIDC provider returned None token
What it means
Azure workload-identity OIDC failure: get_azure_ad_token_provider returned a None token, so the caller has no federated credential to exchange. Indicates the Azure AD workload identity setup (FederatedTokenFile or token provider) is misconfigured.
Source
Thrown at litellm/secret_managers/main.py:283
)
if response.status_code == 200:
oidc_token = response.json().get("value", None)
oidc_cache.set_cache(key=secret_name, value=oidc_token, ttl=300 - 5)
return oidc_token
else:
raise ValueError("Github OIDC provider failed")
elif oidc_provider == "azure":
# https://azure.github.io/azure-workload-identity/docs/quick-start.html
azure_federated_token_file: Final = os.getenv("AZURE_FEDERATED_TOKEN_FILE")
if azure_federated_token_file is None:
verbose_logger.warning(
"AZURE_FEDERATED_TOKEN_FILE not found in environment will use Azure AD token provider"
)
azure_token_provider: Final = get_azure_ad_token_provider(azure_scope=oidc_aud)
try:
oidc_token = azure_token_provider()
if oidc_token is None:
raise ValueError("Azure OIDC provider returned None token")
return oidc_token
except Exception as e:
error_msg: Final = f"Azure OIDC provider failed: {e}"
verbose_logger.error(error_msg)
raise ValueError(error_msg)
with open(azure_federated_token_file, "r") as f:
oidc_token = f.read()
return oidc_token
elif oidc_provider == "file":
# Load token from a file within an allowed credential directory.
safe_path: Final = _resolve_oidc_file_path(oidc_aud)
with open(safe_path, "r") as f:
oidc_token = f.read()
return oidc_token
elif oidc_provider == "env":
# Load token directly from an environment variable
oidc_token = os.getenv(oidc_aud)
if oidc_token is None:View on GitHub (pinned to 77b7c6c40c)
Solutions
- Ensure the Azure managed identity / federated credential is configured so a token is returned.
- Check Azure identity configuration and retry; a None token means no identity was available.
Defensive patterns
Strategy: type-guard
When it happens
Trigger: Thrown at litellm/secret_managers/main.py:283 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of BerriAI/litellm@77b7c6c40c (2026-08-18).
Data as JSON: /api/errors/d7cdb40bf5dc5cd4.
Report an issue: GitHub.