- It impersonates them (the default). Its service account sends their user name and groups in impersonation headers, and the API server applies their RBAC. This works with any cluster.
- It passes their own token on, when the API server already trusts your provider. Its service account then needs no permissions, and the cluster’s audit log names each person directly. See When the API server trusts the provider.


Signing in with single sign-on.
Set it up
You need Lumovi at an address of its own (see Give Lumovi an address): the provider sends people back there after they sign in.1
Register Lumovi with your provider
Add Lumovi as a web application (an OpenID Connect client using the authorization code flow), with this redirect URI:That’s the origin of your
url (its scheme and host), then basePath, then auth/callback. A path in url itself isn’t used, so below a path, with basePath: /lumovi, it’s https://tools.example.com/lumovi/auth/callback.Note the client ID and, if the provider gives one, the client secret. Lumovi uses PKCE, so a public client without a secret works too. With a secret, Lumovi sends it to the provider’s token endpoint with HTTP Basic authentication (client_secret_basic), or in the request body (client_secret_post) when the provider’s discovery document lists the methods it takes and Basic isn’t one of them.Make sure the ID token carries the person’s email address and their groups. Many providers include groups only when asked: with a groups scope, or a setting on the client.2
Store the client secret
Put the secret in a Secret, under the key Or set
client-secret, in Lumovi’s namespace:auth.oidc.clientSecret, and the chart makes that Secret for you. It names it after the release, with -oidc at the end: lumovi-oidc here. So don’t give a Secret of your own that name: if you switch to clientSecret later, the upgrade fails, as the chart can’t make its Secret under a name that’s taken. Leave both empty for a public client.3
Configure Lumovi
values.yaml
issuer is the provider’s issuer URL, where /.well-known/openid-configuration is. Then upgrade the chart with these values.4
Give people roles
People are named by the ID token’s
email claim, and their groups come from its groups claim. Bind roles to those names, with the prefixes you chose:5
Sign in
Open Lumovi and choose Sign in with Dex (or your provider’s name). After signing in at the provider, you’re back where you started, seeing what your own access allows.
Who people are
Prefixes keep your provider’s names apart from the cluster’s own. Without one, a provider group with the same name as one of your groups would get its permissions.
Lumovi never acts as one of Kubernetes’ own users or groups (
system:…), whatever the provider says. It leaves out groups whose names start with system:, and refuses a user whose name does, with Lumovi won’t act as this account: names starting with system: are Kubernetes’ own.
Impersonation
When Lumovi impersonates people, the chart gives its service account permission to impersonate users and groups, cluster-wide: a ClusterRole withimpersonate on users and groups, bound to it. That’s a powerful permission. Read Security before you turn this on, and keep Lumovi in a namespace only cluster administrators can exec into.
If you’d rather manage that RBAC yourself, set rbac.create: false and bind the service account an equivalent role.
When the API server trusts the provider
If the API server already accepts your provider’s tokens (through its--oidc-* flags, a structured authentication configuration, or a managed equivalent such as EKS’s OIDC identity providers), Lumovi can pass each person’s own token on instead of impersonating them.
values.yaml
- No impersonation. Lumovi’s service account needs no permissions, and the chart gives it none.
- The token must be a JWT that says when it expires, in its
expclaim, so Lumovi knows when to renew it. ID tokens always are. Some providers’ access tokens aren’t: with one of those, signing in ends with Signing in didn’t work. The Lumovi server’s log says why. Useidinstead. - Names in RBAC come from the API server. The cluster checks the token itself, so the names and groups it applies RBAC to, and their prefixes, come from the API server’s own settings, not Lumovi’s. Bind roles to the names the cluster sees.
- Some things still come from Lumovi’s settings. The ID token still has to carry the
auth.oidc.usernameClaimclaim. Lumovi shows that name, and the groups inauth.oidc.groupsClaim, in its account menu and its log. And it still refuses a name that starts withsystem:onceauth.usernamePrefixis put before it. - Tokens are renewed. Lumovi renews each person’s token a minute before it expires, with the refresh token the provider gives it. Most providers give one only when
offline_accessis among the scopes. Without one, the session ends when the cluster stops accepting the token, and people sign in again. If renewing fails, the session ends too. Either way, a session lasts no longer thanauth.sessionHours. - The audit log names people directly, instead of Lumovi’s service account acting as them.
When signing in doesn’t work
The sign-in page says what happened. The details go to Lumovi’s log (kubectl logs --namespace lumovi deployment/lumovi).
Security
What impersonation means, and how to keep Lumovi contained.
Helm values
Every sign-in setting.