Backend login (ADR-014): local accounts and OIDC with PKCE, independent so Keycloak down never locks users out; signed session cookie; all other /api/* need a session; AUTH_DISABLED=true required for open mode.
Backend login (ADR-014): local accounts and OIDC with PKCE, independent so Keycloak down never locks users out; signed session cookie; all other /api/* need a session; AUTH_DISABLED=true required for open mode.
The backend now authenticates itself: local accounts from USERS_FILE
(PBKDF2-SHA256, throttled) and OIDC code flow with PKCE, independent of
each other, so Keycloak being down never locks the family out. A signed
stateless cookie carries the session; its user replaces Remote-User as
the requester. Without any sign-in configured the backend refuses to
start unless AUTH_DISABLED=true. /api/live serves the healthcheck.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The throttle now counts an attempt before the password is hashed, so
parallel guesses cannot outrun it, and at most 4 hashes run at once.
A local session ends when its account leaves USERS_FILE. The provider's
error text is sanitized before logging, a missing OIDC_REQUIRED_ROLE is
warned about, OIDC discovery and keys are fetched outside the lock and
an unreadable JWK is skipped. Ops notes: nginx header, compose example,
/api/live for monitors.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
With USERS_FILE set but empty or missing the backend starts in setup
mode and the first visitor creates the account, once, under a lock.
Signed-in users list, add and remove accounts and change their own
password; removed accounts lose their sessions at once. USERS_FILE is
rewritten atomically (temp, fsync, rename, mode 600).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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.
Backend login (ADR-014): local accounts and OIDC with PKCE, independent so Keycloak down never locks users out; signed session cookie; all other /api/* need a session; AUTH_DISABLED=true required for open mode.
View command line instructions
Checkout
From your project repository, check out a new branch and test the changes.