Using Authentication
How to log in, make authenticated API calls, and manage tokens with the CLI and SDK.
Prerequisites: OIDC must be configured on the platform. See OIDC Setup.
Log In
The device flow is the recommended login method. It opens your browser to authenticate with your organization’s identity provider.
Expected output:
Open the URL, enter the code, and sign in with your IdP credentials. After consent, verify:
All CLI and SDK commands now use the stored token automatically.
Requesting Specific Scopes
By default, the CLI requests the scopes configured in auth.oidc.default_scopes (typically platform:read platform:write plus OIDC standard scopes like openid profile email offline_access). Restrict the token’s access by specifying fewer scopes:
See API Scopes for the full list of available scopes.
Non-Interactive Login (CI/CD)
For CI pipelines, use the password grant to obtain a token without a browser: nemo auth login --username <user> --password <pass> (or set NMP_OIDC_USERNAME / NMP_OIDC_PASSWORD environment variables). If your CI system can obtain tokens directly (e.g., workload identity federation), pass the token via access_token as shown in Make API Calls below.
Password grant sends credentials directly to the IdP and bypasses MFA. Many production IdPs disable it. Use a dedicated service account with minimal scopes where possible.
Make API Calls
Python SDK
The SDK reads credentials from the CLI config automatically — no manual token handling needed:
If you need explicit token control (for example, a token from a CI system or environment variable), pass it via access_token:
HTTP (curl)
Token Inspection
Retrieve the raw JWT for debugging or use in other clients:
Decode the token to inspect claims:
Key claims to check:
emailorupn— the principal identityscporscope— granted scopesexp— expiry timestampiss— issuer URL (must match your config)aud— audience (must match your config)
Token Management
How Auto-Refresh Works
You never need to refresh tokens manually — the CLI and SDK handle it transparently:
- SDK: Refreshes lazily before each API call when the token is within 60 seconds of expiry. No background threads or timers — the cost is paid only when a refresh is actually needed (typically once per hour). Multiple
NeMoPlatform()clients in the same Python process share a single token, so only one refresh happens even with many clients. - CLI: Checks the token before every command and refreshes if it expires within 5 minutes. To disable for a specific command:
nemo --no-auto-refresh workspaces list.
Running multiple scripts or CLI commands simultaneously is safe — file-level locking prevents conflicts when refreshing tokens across processes.
If the refresh token itself has expired (e.g., after days of inactivity), re-login with nemo auth login.
Manual Refresh and Logout
Config File
Tokens are stored in ~/.config/nmp/config.yaml:
The OIDC token endpoint is not stored — it is discovered at runtime from your cluster’s /apis/auth/discovery endpoint. This keeps the config portable across environments.
Token storage security — Access and refresh tokens are stored in plaintext. Protect this file:
- File permissions: Ensure
0600(owner read/write only). The CLI sets this by default — verify after manual edits:chmod 600 ~/.config/nmp/config.yaml. - Shared directories: Do not store in cloud-synced folders (Dropbox, OneDrive, Google Drive) or shared home directories.
- Refresh token rotation: Configure your IdP to rotate refresh tokens on each use. A stolen refresh token becomes invalid after the legitimate client uses it once.
- Logout when done: Run
nemo auth logouton shared or temporary machines.
Related
- OIDC Setup — Configure your identity provider.
- API Scopes — Scope model and available scopes.
- Security Model — Trust boundaries and the principal model.
- Troubleshooting — Fix common 401/403 errors and login failures.