One Browser Flow Unlocks Every AWS SSO Provider
atmos auth login now performs one browser interaction per AWS SSO portal, no matter how many
aws/iam-identity-center providers in your atmos.yaml point at it. Cached tokens also refresh silently for the
full ~8-hour portal session window — no more re-prompt every hour.
What Changed
The aws/iam-identity-center provider's token-acquisition path was rebuilt around the AWS SSO token provider behavior
that AWS CLI v2 has used since late 2022:
- Implicit session sharing. Providers with identical
start_url+regionnow share an OIDC token in a single in-process registry, keyed bysha1(start_url + "|" + region). The first provider to authenticate completes the device-authorization flow once; subsequent providers reuse the same token without prompting. - Refresh-token renewal. When the cached access token expires but the refresh token is still valid, atmos
silently exchanges it via
ssooidc:CreateTokenwithgrant_type=refresh_token. Browser interaction only happens when both the access token AND the refresh token have expired (typically after ~8 hours of portal-level session). - Session-keyed disk cache. The on-disk cache moved from
~/.cache/atmos/aws-sso/<provider-name>/token.jsonto~/.cache/atmos/aws-sso/sessions/<sha1>.json. Renaming a provider inatmos.yamlno longer invalidates a valid cached token, and the cache file format is compatible with the AWS SDK'sssocredspackage.
There are no configuration changes. Same atmos.yaml, same kind: aws/iam-identity-center, same
start_url/region fields. The improvement is invisible until you notice you're hitting the browser less often.
Why This Matters
A common atmos setup has one provider per environment (dev / staging / prod) all backed by the same corporate SSO
portal. Before this release, atmos auth login would launch the browser flow three times — once per provider —
even though the underlying portal session is the same. Worse, each provider had its own token cache file, so a
rename or a config refactor silently invalidated cached tokens.
The headline UX problem: AWS itself shows users the message "Your credentials have been shared successfully and can be used until your session expires" after a single portal sign-in. Atmos's behavior didn't match that promise. This release closes the gap.
The secondary problem solved is silent renewal. The original SSO flow re-ran the full browser interaction on every access-token expiry (~1 hour). With refresh tokens wired into the cache, atmos now mirrors the AWS CLI's behavior: one browser interaction holds for the portal-session lifetime, often a full 8-hour workday.
How It Works
The new Authenticate() flow is a four-stage pipeline:
- In-memory session cache — instant return for any provider that shares an already-authenticated portal in the current process.
- On-disk session cache — survives process restart; populated by prior atmos invocations.
- Refresh-token exchange — silent network call when the cached access token expired but the refresh token is still valid. No browser.
- Device-authorization flow — full browser interaction. Only runs when all three fast paths miss. Single-flighted
per session, so parallel
atmos terraforminvocations don't race into duplicate browser prompts.
Per-session mutexes coalesce concurrent callers: if you fire atmos terraform plan against three components backed
by the same SSO portal, only one device-auth flow runs and the other two wait on its result.
