Skip to main content

Identity and access

One identity, from the login page to the table. The token that signs you in to Nova is the token your query carries to the SQL engine.

The shape​

browser ──login──▶ Nova ──OIDC authorization code + PKCE──▶ identity provider
│ (Keycloak or your own)
│ session cookie (HttpOnly, Secure)
▼
Nova backend ──your access token──▶ Trino ──▶ permission check
│
▼
Lakekeeper (as a service)

Nova holds no passwords and no user store. Keycloak ships as the default. Any standards-compliant OIDC provider, such as Entra ID, Okta or your own Keycloak, can take its place.

Trino authenticates you and asks the permission store whether you may do what you asked. Trino then talks to the catalog as a trusted service, not as you. Per-component sign-in explains each hop.

Choose a mode​

identity.modeWhat happens
none (chart default)No sign-in. Everyone is treated the same. For trying things out behind a port-forward
platformstardelt deploys Keycloak at id.<baseDomain> with the stardelt realm and its clients
externalYou bring the OIDC provider and register the clients yourself

Switching a running install to sign-in is a values change and a rollout, with no data migration.

Bring your own OIDC provider​

stardelt signs people in with OpenID Connect. Any provider that meets the requirements below can be used; Keycloak is the one stardelt can deploy and configure for you.

Requirements

RequirementWhy stardelt needs it
Discovery at <issuer>/.well-known/openid-configurationevery component finds the endpoints from the issuer
Authorization code flow with PKCEbrowser sign-in to Nova, Superset, Airflow and JupyterHub
Device authorization flowstardelt login on the command line
Client credentials flowservice principals that run pipelines
A groups claim in the access token (name set with NOVA_OIDC_GROUP_CLAIM, default groups)permissions by group
An audience that Nova and Trino acceptone token reaches Nova, Trino and the catalog

Tested providers

ProviderModeStatus
Keycloakidentity.mode: platformtested in CI and on the dev cluster

Other providers are expected to work when they meet the requirements; testing them is tracked in stardelt/stardelt-platform#611.

Names​

ThingValueNotes
Realmstardeltusers, groups and clients; one per platform
Issuer URLhttps://id.<baseDomain>/realms/stardeltwhat every component validates against
Nova clientnova, confidentialauthorization code with PKCE, redirect https://<nova-host>/api/auth/callback
Trino clienttrino, publicbearer tokens for queries
Admina member of stardelt-adminsgroup membership is the role

Nova's settings​

VariableMeaning
NOVA_AUTH_MODEdev (no login, the default) or oidc
NOVA_OIDC_ISSUERIssuer URL; discovery is /.well-known/openid-configuration
NOVA_OIDC_CLIENT_ID, NOVA_OIDC_CLIENT_SECRETRegistered client credentials
NOVA_OIDC_SCOPESDefault openid profile email
NOVA_SESSION_SECRETSigns the session cookie; generated per install
NOVA_OIDC_GROUP_CLAIMClaim that carries groups, default groups
NOVA_OIDC_ADMIN_GROUPGroup that maps to Nova admin, default stardelt-admins
NOVA_FORWARD_IDENTITYSends the caller's token to Trino, so queries run as that person

How you sign in​

  • Browser. Nova sends you to the identity provider, exchanges the returned code for tokens, verifies them, and sets a session cookie. The cookie holds a reference, and tokens stay on the server.
  • Scripts and tools. Send Authorization: Bearer <access token> on any /api/* route. stardelt login gets a token with the device code flow. See Python, command line and agents.
  • Check yourself. GET /api/me returns your claims and whether your identity is forwarded (identity_forwarding).

Claims Nova reads​

ClaimUsed for
subThe stable user identifier
preferred_username, emailDisplay
groups (configurable)Administrator or not, and which groups you belong to
exp, aud, issValidation only

Rules​

  • Tokens never appear in a URL, a log line or an error message.
  • The session cookie is HttpOnly, SameSite=Lax, and Secure on HTTPS.
  • Logging out ends the session in Nova and at the identity provider.
  • Group membership is the role. There are no per-user special cases.
  • A failed identity provider is a failed login. Nova never falls back to dev at runtime.