Authentication¶
alcf-proxy authenticates to ALCF via Globus, built in — no external script. You log in once per machine; the proxy then caches the access token and refreshes it automatically as it nears its ~48h expiry.
One-time login¶
This opens your default browser for Globus OAuth and starts a short-lived local callback server to receive the result, then stores the refresh + access tokens (the refresh token lasts months) in globus-sdk's standard per-platform location.
Check status any time:
Where the token is stored¶
The path is chosen by globus-sdk per-OS — alcf-proxy never hard-codes it. auth status prints the
exact path. Typical locations:
| OS | Location |
|---|---|
| Linux | ~/.globus/app/.../inference_app/tokens.json |
| macOS | ~/.globus/app/.../inference_app/tokens.json |
| Windows | under %LOCALAPPDATA% |
Keep the token private
The refresh token is a long-lived credential. Never commit tokens.json to git or copy it to a
shared directory. On Unix it is created with -rw------- (owner-only) — keep it that way.
Platform-specific login¶
Works out of the box. alcf-proxy auth login opens the browser and the local callback completes
automatically.
The local-callback flow needs a browser that can reach localhost on the login machine.
On a headless box you have two options:
- Log in on a machine with a browser using the same OS user profile, then reuse the token directory, or
-
Forward the callback port over SSH so the remote flow can complete in your local browser:
Note
A copy-paste device-code fallback is not yet implemented. If you need it, open an issue.
Token lifecycle¶
- Access token rotates ~every 48h. The proxy caches it and refetches only when < 5 min from expiry (thread-safe).
- Refresh token silently renews the access token and lasts months. Only if it dies (~6 months
idle) do you need to run
alcf-proxy auth loginagain. - The token lives only in the proxy process memory and is injected as an
Authorization: Bearerheader. Your CLIs send a dummy key; they never see the real token.
Next: Quickstart.