Pre-1.0 · Self-hosted · Design-partner program
OAuth clients as Kubernetes resources.
A self-hosted OpenID Connect server with a Kubernetes operator. The operator registers each OIDCClient declared beside your Deployment and writes its secret into a Secret.
By joining, you agree to our Privacy Policy and Terms.
apiVersion: nauthera.io/v1alpha1
kind: OIDCClient
metadata:
name: example-webapp
namespace: storefront
spec:
clientId: example-webapp
redirectUris:
- https://app.example.com/callback
grantTypes:
- authorization_code
- refresh_token
tokenEndpointAuthMethod: client_secret_basic
pkcePolicy: required_s256
allowRefresh: true
secret:
generate: trueStandards
Runs with
- Kubernetes
- Helm
- cert-manager
- PostgreSQL
- Redis
- Prometheus
- OpenTelemetry
Operator · tested on kind
From manifest to mounted Secret
OAuth clients from reviewed manifests, with no ticket and no secret copied by hand.
$ grep -E 'tokenEndpointAuthMethod|pkcePolicy' storefront-spa.yaml
tokenEndpointAuthMethod: none
pkcePolicy: optional
$ kubectl apply -f storefront-spa.yaml
The OIDCClient "storefront-spa" is invalid: spec: Invalid value: public clients (tokenEndpointAuthMethod 'none') must set pkcePolicy to 'required_s256'Built and tested today
The server and its operator: tested in CI, shipped signed.
Also in the binary: DPoP, an admin API, Prometheus metrics and OpenTelemetry traces, and a runbook for every alert and error code.
Caught before anything is applied
These unsafe production settings stop the server at startup. The Helm chart catches them at install, with the fix.
Also built in
- Exact redirect-URI matching
- Per-IP and per-account brute-force limits
- Control plane needs mTLS off loopback
$ helm install nauthera ./deploy/helm/nauthera-server \
--set config.issuer.url=https://auth.example.com
Error: INSTALLATION FAILED: execution error at (…):
nauthera-server: issuer "https://auth.example.com" is a real, fronted deployment (host "auth.example.com" is not
loopback), and the server refuses to start in this configuration:
* cache.enabled is false. …
Fix: set config.cache.enabled=true and config.cache.address.
* the signing key is ephemeral (keys.provider=memory). …
Fix: leave certManager.signingKey.enabled=true (…), or set config.keys.provider=file …
* the MFA seed-encryption key is ephemeral (mfa.provider=memory). …
Fix: set config.mfa.provider=file and supply secrets.mfaEncryptionKey.
Each of these is a startup error in the server itself, not a warning. They are
reported here so you meet them before anything is applied.Hear when the operator ships
One email when the operator ships. No newsletter.
By joining, you agree to our Privacy Policy and Terms.
