docs(spec): access tokens as QQQ's personal access tokens (revision 6) #21

Merged
KofTwentyTwo merged 2 commits from feature/token-spec into develop 2026-10-14 01:01:46 +00:00
KofTwentyTwo commented 2026-10-14 00:42:43 +00:00 (Migrated from github.com)

Summary

  • DESIGN.md revision 6: owner decisions (2026-10-13) 23-30 and a new section 13, "Access tokens". Authentik tokens, managed through this qbit, are QQQ's personal access token solution. TOKENS is on by default with writes enabled, with an opt-out.
  • Decision 30 is the owner-approved (coordinator-approved) mechanism revision. In Authentik 2026.8.3, TokenViewSet.perform_create always assigns a non-superuser's new token to the caller, so add_token cannot mint tokens for anyone else. Tokens for people are therefore created as that person, through RFC 8693 token exchange via a qqq-<appKey>-token-broker provider that has a deny policy for protected users. Service accounts use service_account, set_key and PATCH; every PATCH sends intent, user and expires, and a race guard re-reads the token afterwards.
  • Guardrails (a)-(f), optional per-token scopes (the authentik_token_scope table, a signed qqq_token claim and core QCredentialScope, qqq#1153), the one-time key (core OneTimeSecret, qqq#1162 plus a process-output PR), reminders, last used, admin views and the delivery phases.
  • New docs/ACCESS-TOKENS.md, "Using access tokens".

Test plan

  • Docs only; links checked.

🤖 Generated with Claude Code

## Summary - DESIGN.md revision 6: owner decisions (2026-10-13) 23-30 and a new section 13, "Access tokens". Authentik tokens, managed through this qbit, are QQQ's personal access token solution. TOKENS is on by default with writes enabled, with an opt-out. - Decision 30 is the owner-approved (coordinator-approved) mechanism revision. In Authentik 2026.8.3, `TokenViewSet.perform_create` always assigns a non-superuser's new token to the caller, so `add_token` cannot mint tokens for anyone else. Tokens for people are therefore created *as that person*, through RFC 8693 token exchange via a `qqq-<appKey>-token-broker` provider that has a deny policy for protected users. Service accounts use `service_account`, `set_key` and `PATCH`; every `PATCH` sends `intent`, `user` and `expires`, and a race guard re-reads the token afterwards. - Guardrails (a)-(f), optional per-token scopes (the `authentik_token_scope` table, a signed `qqq_token` claim and core `QCredentialScope`, qqq#1153), the one-time key (core `OneTimeSecret`, qqq#1162 plus a process-output PR), reminders, last used, admin views and the delivery phases. - New `docs/ACCESS-TOKENS.md`, "Using access tokens". ## Test plan - [x] Docs only; links checked. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Sign in to join this conversation.