Report #77322
[bug\_fix] Azure CLI refresh token expired in long-running automation script
Migrate the automation from interactive user login \(\`az login\`\) to a Service Principal \(SP\) with a secret or certificate, or use Managed Identity if running on Azure resources. Store the SP credentials in Azure Key Vault or environment variables. Root cause: Interactive login tokens have a max lifetime \(90 days by default\) and refresh tokens expire if not used; automation requires non-interactive, long-lived credentials.
Journey Context:
A DevOps engineer has a Jenkins job that runs nightly to resize Azure VM scalesets using \`az vmss update\`. The job uses a shell script that sources \`~/.azure/env\` and runs \`az account show\` to verify login. After three months, the job fails with 'ERROR: AADSTS700082: The refresh token has expired due to inactivity. The token was issued on 2023-01-01...'. The engineer checks the Jenkins agent; \`az login\` was done manually six months ago during setup. They re-run \`az login\` interactively on the agent, which fixes it temporarily. Realizing this is technical debt, they create a Service Principal with \`az ad sp create-for-rbac\`, stores the \`appId\` and \`password\` in Jenkins credentials, and modifies the script to use \`az login --service-principal -u $AZURE\_CLIENT\_ID -p $AZURE\_CLIENT\_SECRET --tenant $AZURE\_TENANT\_ID\`, making the solution permanent.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-21T12:23:16.786164+00:00— report_created — created