You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
feat: OIDC SSO (Google/GitHub/generic) and LDAP login with invitation-only mode.
Adds two login paths alongside local passwords:
- OIDC/OAuth via a provider registry, shipping Google, GitHub, and a
generic OIDC profile (Keycloak/Authentik/Okta). Access is gated by
email-domain, email, or IdP-group allowlists, with `OIDC_ALLOW_SIGNUP`
defaulting to invitation-only. Admins pre-provision users through a new
`POST /api/users/invite` endpoint; SSO then links by verified email.
- LDAP/AD as a fallback in `POST /api/auth/login`, with optional group
sync into local `groups` (rows marked `ldap_dn`) and admin-group
mapping. Takeover guard refuses to bind when a real local password
exists under the same username.
Schema additions land as migrations v6 (`auth_identities` table keyed by
`(provider, subject)`) and v7 (`groups.ldap_dn` with partial unique
index). SSO-only accounts use `password_hash='!'` so bcrypt can never
match.
LDAP group-search errors are distinguished from clean empty results so
transient LDAP flakes can't silently demote admins. SessionMiddleware
cookies auto-harden to HTTPS when `PUBLIC_BASE_URL` is https, with a
startup warning when SSO is enabled over plaintext.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
0 commit comments