#1383 + konairius/Wiki#14 put the wiki's read API behind an OIDC session
or an API key. External agents only have the wiki-index.renner.uno
BasicAuth credentials and got 401 since.
konairius/Wiki (feat/basic-auth-machines) checks `Authorization: Basic`
in the service against the htpasswd lines Traefik uses. This mounts the
existing Secret wiki-api-basic-auth (OpenBao apps/ai/wiki-index-basic-auth,
already the wiki's own) read-only at /var/run/secrets/wiki-basic-auth.
Auth__Basic__UsersPath points at the directory, because the service reads
every key there, as Traefik does. A rotated Secret now also rolls the pod
(reloader annotation).
Order does not matter: the current image ignores the setting, and the new
image without it authenticates nobody over BasicAuth. Traefik's middleware
on wiki-index stays.
The dashboard console's /api/pty and /api/events WebSockets close
together every ~12-23 s (Traefik durations 18.9/21.8/22.7/22.8 s on
2026-10-19 11:14-11:19Z), the browser reports code 1006 and shows
"Please wait while the conversation loads…". The TUI process and
/api/status stay healthy meanwhile. The only ~20 s server timer found is
uvicorn's WS keepalive (dashboard.ws_ping_interval, default 20 s).
Diagnostic change: if socket lifetimes move to ~60 s the keepalive is
implicated; if they stay at ~20 s it is ruled out. Set via init container
like dashboard.trusted_proxies since there is no env equivalent.
The dashboard logged out exactly ~60 min after every login
(dashboard-auth.log: session_rejected reason=no_cookie at login+60m).
Hermes' self-hosted OIDC provider defaults to "openid profile email" and
the Authentik hermes-provider mapped only those scopes. Since authentik
2024.2 a refresh token is issued only when the client requests
offline_access and the provider has the offline_access scope mapping, so
Hermes never got one and could not rotate the session when the ID-token
cookie expired.
- authentik blueprint: add the managed scope-offline_access mapping to
hermes-provider (refresh_token grant was already enabled).
- hermes: HERMES_DASHBOARD_OIDC_SCOPES adds offline_access.
Stage 3 of 3. Merge only after konairius/Wiki feat/oidc-login is running
(Deployment image newer than build.1790322994 and `wiki-79948db4c6` gone):
the current image has no login of its own, so on plain Traefik its UI
would be open to the LAN.
- Ingress `wiki`: ingressClassName traefik instead of authentik-gate.
authentik-gate-sync's sweep then deletes what it generated for the gate
(Ingress/Service/CNP wiki-gate in ai, CNP gate-ai-wiki-c9ba6b in
authentik, the ai-wiki-c9ba6b outpost, application and provider). One
proxy layer fewer: Traefik -> wiki.
- Deployment: the Auth__ReverseProxy__TrustedProxies entries go. They were
a hand copy of the Talos podSubnets, and the OIDC image no longer reads
them.
- Middleware wiki-api-strip-identity goes. No header names a user any
more; wiki-index.renner.uno keeps BasicAuth.
- Comments in ai-ns.yaml and the Authentik blueprint follow.
The `wiki` CNP already admits Traefik on 8080, and the ai namespace egress
already reaches Traefik, so auth.renner.uno (OIDC discovery, JWKS, token)
needs no new rule.
# wiki: Traefik (the machine door wiki-index.renner.uno, BasicAuth with
# X-Authentik-Username stripped), Gitea (push webhook) and Hermes Agent (API
# key) may reach it; the gate outpost (humans, after Authentik) is admitted
# by the CNP wiki-gate that authentik-gate-sync generates. Gitea and wiki-embed
# wiki: Traefik (wiki.renner.uno, OIDC login in the service, and the machine
# door wiki-index.renner.uno, BasicAuth), Gitea (push webhook) and Hermes Agent
# (API key) may reach it. Gitea, wiki-embed and auth.renner.uno (via Traefik)
# are reached through the namespace egress above; no OpenBao access.
apiVersion:cilium.io/v2
kind:CiliumNetworkPolicy
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.