Identity configuration¶
The flat configuration hub remains the compatibility route. This page is the canonical source-checked field reference for its family, including nested tables and list rows.
Paths in the tables are relative to [oidc] or [identity]. Each row gives
the serde type and source default or unset meaning; issuer credentials and
mapping material stay outside committed TOML. Check parsing and identity
cross-field rules with gdsgate doctor --config <PATH> --json, then follow the
sign-in guide.
[oidc]¶
Used by: Authority, Client.
External OIDC identity provider. With issuer and client_id set, Authority
verifies identity tokens against the provider's published signing keys (JWKS) and
gdsgate login runs the device flow against it. Unset, the built-in development
issuer is used (HS256, with the client minting a local dev token), for
development only.
| Key | Type | Default | Purpose |
|---|---|---|---|
issuer |
string | unset | Issuer base URL, for example https://idp.example.com/realms/gdsgate. Discovery is fetched from <issuer>/.well-known/openid-configuration. The token's iss claim must equal this exactly. |
client_id |
string | unset | OAuth client id registered for gdsgate at the identity provider. |
audience |
string | client_id |
Expected aud claim. |
id_token_signing_algs |
array of string | all asymmetric JWA algs jsonwebtoken supports (RS256/384/512, PS256/384/512, ES256, ES384, EdDSA) |
id_token signing-algorithm whitelist. Cross-checked against the IdP's id_token_signing_alg_values_supported at discovery, and against the token's header alg at validation. Symmetric HS* is always rejected at parse time, as an algorithm-confusion guard. |
jwks_refresh_secs |
u64 | 3600 |
How often Authority re-fetches the provider's JWKS; the trust set is hot-swapped on each refresh, so key rotation needs no restart. A refetch also fires on demand when a token names an unknown key. 0 disables the periodic refresh. |
request_timeout_secs |
u64 | 15 |
Per-request timeout for HTTP calls to the provider (discovery, JWKS, device-code, token exchange). Bounds connect and read so a slow provider cannot wedge Authority at boot. |
allow_insecure_http |
bool | false |
Allow http:// for provider URLs. Off by default, since a plaintext JWKS fetch is compromisable by an on-path attacker. Turn it on only for a loopback dev provider; each http:// call is logged at WARN. |
[oidc]
issuer = "https://idp.example.com/realms/gdsgate"
client_id = "gdsgate"
# audience defaults to client_id when unset
# id_token_signing_algs defaults to every asymmetric JWA alg; narrow it
# to your IdP's actual policy to harden:
id_token_signing_algs = ["RS256"]
Issuer must match exactly
The configured issuer, the issuer the provider advertises in its discovery
document, and the iss claim of every token must all be byte-identical.
Reach the provider by a single hostname from every node and every client.
[identity]¶
Used by: Authority.
How identity claims (the token's sub and groups, and Kubernetes
impersonation values) are sanitized before use.
| Key | Type | Default | Purpose |
|---|---|---|---|
allow_system_groups |
bool | false |
Allow claim and impersonation values starting with system:, or the bare kubernetes-admin / cluster-admin. Off by default, since they map to privileged Kubernetes built-in roles with no auditable policy binding. When on, each occurrence is logged at WARN. |
max_length |
usize | 253 |
Maximum length, in bytes, of one sanitized value (sub or a single group). 253 is the Kubernetes DNS-label convention the apiserver accepts. |
max_groups |
usize | 64 |
Maximum number of group memberships per identity. Caps the certificate's group list and the number of impersonation headers. |
[identity]
# Defaults are the safe choice. Override only with reason.
allow_system_groups = false
max_groups = 64
The gdsgate- namespace is the cluster's own. A token whose sub or whose
groups carry a value starting with gdsgate- is refused, and no key turns that
off. Those are the names the cluster issues to itself: gdsgate-admin and
gdsgate-provisioner behind the control-plane certificates, gdsgate-connector
/ gdsgate-proxy / gdsgate-workload behind the nodes, and
gdsgate-break-glass for the break-glass rule.
A Cedar principal id says nothing about how it was proved, so a provider that
emitted gdsgate-admin as a sub would hand a person the identity of the
control-plane certificate, and one that emitted gdsgate-break-glass as a group
would hand out the permit that probe relies on. Map the claim to a name of your
own; the group people hold is yours to choose, and only the gdsgate- prefix is
taken.