Security & Tenancy

Static Tokens

Pre-shared bearer tokens — the simplest way to secure a personal hub.

A static token is a pre-shared bearer token. No identity provider, no callback URLs, no client configuration — just a string both sides agree on.

Each distinct token becomes its own isolated user on the hub, with its own personal organization and workspace. A static token is admin within its own tenant — it is not a platform-wide admin credential unless you also list its identity in hub.adminUsers.

Static tokens are the right choice for:

  • A single-user home lab
  • Quick dev / test deployments
  • CI/CD pipelines
  • Bootstrapping a hub before you set up OIDC

1. Generate a token

openssl rand -hex 32

Save the output somewhere safe (password manager, encrypted file) — anyone who has it can act as that user.

2. Configure the hub

The Helm value is a list — you can issue several tokens, and each maps to a separate tenant user:

hub:
  hubExternalURL: "https://hub.example.com"
  staticAuthTokens:
    - "<token-for-you>"
    - "<token-for-ci>"

# No idp section needed

Apply:

helm upgrade --install kedge oci://ghcr.io/faroshq/charts/kedge-hub \
  -f values.yaml \
  --namespace kedge-system \
  --create-namespace

Or pass tokens directly to the binary in non-Helm setups (the flag is repeatable):

kedge-hub \
  --static-auth-token=<token-one> \
  --static-auth-token=<token-two> \
  --hub-external-url=https://localhost:9443

3. Log in with the token

kubectl kedge login \
  --hub-url https://hub.example.com \
  --token <your-token>

Add --insecure-skip-tls-verify if the hub uses a self-signed certificate. This writes a kubeconfig context named kedge with the token embedded.

4. Verify

kubectl kedge edge list

Rotating a token

Static tokens don’t auto-rotate. To rotate: generate a new token, replace it in staticAuthTokens, helm upgrade, and re-run login --token wherever the old one was used. Note that a new token is a new user with a fresh personal workspace — for rotation-without-migration keep this in mind, or use OIDC/service accounts where identity and credential are separate.

Security notes

  • A token is the full identity of its user — treat it like a password. Store it in a password manager or an encrypted secrets store; don’t commit values files containing tokens.
  • Scope by issuing separate tokens per purpose (you, CI, a teammate) instead of sharing one — each gets its own isolated tenant, and you can revoke them individually.
  • Platform-admin powers (provider onboarding, admin API) require the identity to be listed in hub.adminUsers — static tokens don’t get this implicitly.
  • For multi-user scenarios with real names and revocation, switch to OIDC.