plan(phase1): SB ApiKeys A+B foundation done+reviewed; C/D/E pending
This commit is contained in:
@@ -170,6 +170,19 @@ Decision: **full adopt** the library SQLite store + scopes model. Single consist
|
||||
Sub-tasks (sequential where files overlap): **(A)** storage retire + EF migration + library wiring/options;
|
||||
**(B)** auth-path rewrite (Bearer + verifier + scope check); **(C)** management (ManagementActor + CLI + messages);
|
||||
**(D)** CentralUI pages; **(E)** runbook/CHANGELOG + integration test sweep. A→(B,C)→D→E.
|
||||
Sequencing note: doing it **additively** (add library path, switch auth, rewire mgmt/UI, retire SQL Server entity LAST)
|
||||
keeps the build green at each step.
|
||||
|
||||
### Re-arch progress
|
||||
- **A+B foundation — DONE + reviewed+fixed** (commits `a94558c`, `1fcc4f5`; re-pinned to 0.1.2). Library `AddZbApiKeyAuth`
|
||||
wired additively (`ScadaBridge:InboundApi:ApiKeyStore`, prefix `sbk`, reuses inbound pepper); inbound endpoint now uses
|
||||
the library verifier + Bearer + `Scopes.Contains(methodName)`. Security invariants preserved: 401 generic / 403 identical
|
||||
body for not-found AND not-in-scope (enumeration-safe, pinned to a literal in tests), scope-check-before-DB (no timing
|
||||
oracle), fail-fast pepper preflight (Central), audit actor = DisplayName. Old SQL Server path still compiles (retired in E).
|
||||
163/163 InboundAPI tests green. **NOTE for E:** the library's `ApiKeySecretGenerator.NewSecret()` is `internal` — seed/create
|
||||
keys via the public `ApiKeyAdminCommands.CreateKeyAsync` seam (returns the assembled `sbk_…` token).
|
||||
- **C (management), D (CentralUI), E (retire SQL Server ApiKey + ApiMethod.ApprovedApiKeyIds migration + runbook/CHANGELOG)
|
||||
— PENDING.**
|
||||
|
||||
## Resolved decisions (2026-06-02)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user