net-kingdom/docs/sign-in-diagnosis.md
tegwick c19eabc4ae
All checks were successful
CI Smoke / host-smoke (push) Successful in 0s
CI Smoke / container-smoke (push) Successful in 3s
Accept the account-site session lines (NK-WP-0051-T03 done).
Records the user-engine digest and that Authelia's authentication_level
is not assurance, since KeyCape checks the one-time code.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

Assistant: claude-code
Assistant-Model: opus
Assistant-Process: 1041694@bnt-lap001
Assistant-Session: 7af0bb68-ac4a-4ce3-8639-24ddd84c0b52
2026-10-15 05:22:52 +02:00

4.6 KiB

Sign-in diagnosis contract

Status: accepted contract for NK-WP-0051. This document is the only copy of the field list; other repositories link here instead of restating it.

Why

MASON-WP-0011 took a day because three facts about one login were split across the account site, Authelia, and OpenBao. OpenBao said only claim "groups" does not match any associated bound claim values. Every surface below shows the same three facts, named the same way, for this authorization request and no earlier one.

Fields

Field Meaning Source
uid The uid KeyCape resolved for this request Authelia preferred_username (fallback sub), as KeyCape's Authelia adapter resolves it
groups Directory group display names, sorted That uid's LLDAP memberOf, reduced to display names
assurance aal2 if this request verified a one-time code, else aal1 KeyCape: a one-time code verified within this request. Not MFAVerified alone, which is also true when a reused aal2 session satisfies the request
client_id The relying party the login returns to The authorization request
openbao_error OpenBao's error text, verbatim ops-mason receipt only

assurance is per request. A reused session that was aal2 earlier is aal1 here unless this request asked for and verified the one-time code. Enrolling a factor is not aal2.

Authelia's own authentication_level is not assurance. KeyCape checks the one-time code through privacyIDEA, so Authelia reports level 1 even for an aal2 sign-in. Surfaces take assurance from KeyCape (the request or the token it issued), never from Authelia's /api/state.

Never shown or logged

Tokens (ID, access, refresh, OpenBao), authorization codes, email addresses, one-time passwords or seeds, passwords, session cookies, and raw memberOf DNs. Group display names and the uid are the diagnosis; they are not secret.

Where each field appears

Surface Fields Owner Task
KeyCape page before the redirect to the application. Opt-in per client (registration flag, default off), enabled first for the OpenBao client. One action: continue, plus how to sign in as someone else uid, groups, assurance, client_id key-cape NK-WP-0051-T02
The existing KeyCape auth log line client_id, uid, assurance key-cape NK-WP-0051-T02
Account site users.coulomb.social: account-site uid and current Authelia uid on two separate lines. Authelia's cookie domain stays coulomb.social uid (twice, labelled by session), assurance of the account-site session user-engine NK-WP-0051-T03
lldap_admin.py groups --user <uid> (read-only preview) uid, groups net-kingdom NK-WP-0051-T04
ops-mason verifier receipt for an attended bao login uid, openbao_error (and assurance when known) ops-mason NK-WP-0051-T06

Matching groups to an OpenBao role stays a metadata read in ops-mason.

Negative-login fixture

Fixture uid: signin-probe-negative.

  • not a member of reuse-surface-hub-writers
  • not a platform admin (net-kingdom-admins)
  • holds a one-time password (enrolled by the founder in NK-WP-0051-T05 at https://pink-account.coulomb.social/, realm coulomb)

The user is never created or described with credentials in git. A successful diagnosis of this fixture shows uid=signin-probe-negative, groups without reuse-surface-hub-writers, assurance=aal2, and then the OpenBao groups refusal.

Evidence

Item Value
key-cape page and log line live 2026-10-15: forgejo.coulomb.social/coulomb/key-cape@sha256:cdec9dd7c515f7e0a6169fc3fa560ee2cc47bf40d899755dec808c362f5ce010 (source 8c6c071, includes af3b1b0). signInDiagnosis: true set on live openbao-admin 2026-10-15 (sso/keycape-config rv 71655453 → 75372162, byte-preserving, issuer restarted). Accepted 2026-10-15: founder bao login -method=oidc -path=netkingdom role=platform-admin showed the page and completed
user-engine two-session lines live 2026-10-15: forgejo.coulomb.social/coulomb/user-engine@sha256:1e6547c40c93c49f01438edcf76c20f561ccebc110220bae020723505aa56c70 (source 7f1db71, pinned in rapp-user-engine a42c68f). Also shows the account-site session assurance. Founder accepted: platform-root · aal2 and Authelia platform-root
ops-mason receipt, fresh-browser login, capabilities-self proof ops-mason fca5591 (MASON-WP-0012); live proof pending MASON-WP-0012-T04
sys/capabilities-self grant and UI workload-role select railiance-platform 0f0282a (RPF-WP-0057); CCR-2026-0045 approval/apply and overlay deploy pending RPF-WP-0057-T02/T04