Security

Phase 1 preview — pages render fixture data only; no changes are saved.
What lives where. The fields below are stored in the settings table. Session lifetime, secure cookies and sign-in throttling are environment-only and listed read-only underneath.

Two-factor authentication

Turning this on forces enrolment of an authenticator device immediately, for everyone it applies to. The app does not check a live code on every API call, only that the user has enrolled.

Optional lets people opt in on their profile. Required makes everyone enrol an authenticator device at their next sign-in.

Password policy

Applies when a password is set or changed. There is no password expiry, history or reuse prevention.

Minimum permitted value is 8.
Rejects passwords found in a list of commonly used ones.
Complexity rules

Remote user login

Legacy-only. Trusts a header set by the web server and signs that user in without a password. If anyone can set the header, anyone can sign in as any user, including a superuser.

Matches the header value to an active user by exact username. Nobody is created automatically.
Leave blank for REMOTE_USER. Use the server variable name, for example HTTP_X_REMOTE_USER.
Where people go after signing out while remote-user login is on.
Only available once remote-user login has been enabled and saved. With it on, the local login page returns 403.
Cancel Saving settings is not available in Phase 1 — this screen previews the current configuration.

Controlled by the environment (read-only)

These behaviours have no settings screen in the legacy app. Change them in the server environment.

BehaviourEnvironment variableEffective value Actions
Session lifetimeSESSION_LIFETIME12000 minutes
Expire session on browser closeEXPIRE_ON_CLOSENo
Secure cookiesSECURE_COOKIESOn (HTTPS only)
Failed sign-ins before lockoutLOGIN_MAX_ATTEMPTS5
Lockout durationLOGIN_LOCKOUT_DURATION60 seconds
Two-factor codes per minuteTWO_FACTOR_MAX_ATTEMPTS_PER_MIN5
Password reset link validityRESET_PASSWORD_LINK_EXPIRES900 seconds
Password re-confirmation windowPASSWORD_CONFIRM_TIMEOUT10800 seconds
Force SAML sign-inREQUIRE_SAMLNo
Demo lockAPP_LOCKEDOff

OIDC bearer validation

Disabled

Configured in the environment, not here: legacy has no settings screen for it, and none is invented. It only validates bearer tokens presented to the API; it is not an interactive sign-in.

Environment variablePurpose Actions
OIDC_API_ENABLEDMaster switch (default off).
OIDC_API_ISSUERSComma-separated list of accepted token issuers (iss).
OIDC_API_AUDIENCEComma-separated list of accepted audiences (aud).
OIDC_API_JWKS_URIOptional. Otherwise discovered from each issuer's .well-known/openid-configuration.
OIDC_API_ALGORITHMSAccepted signing algorithms (default RS256, RS384, RS512, ES256; HS* and none are never accepted).
OIDC_API_USERNAME_CLAIMClaim matched to a local username (default preferred_username).
OIDC_API_LEEWAYClock skew allowance in seconds (default 60).

Not part of the legacy application