API Runtime Gate Probe

Public Reads sichtbar, Operator-API bis zu echten Gates blockiert

API Runtime Gate Probe: Public-Read-Flächen und Runtime-Kontrollen sind dokumentiert; produktive Operator-/Write-/Admin-Flows bleiben blockiert, bis 7/7 API-Key-Servergates freigegeben sind.

Dieser Probe ist ein öffentlicher No-Secret-Nachweis. Er erstellt keine API-Keys, prüft keine echten Authorization-Header, speichert keine Hashes und führt keine Schreibaktion aus. Echte Live-Deny-Smoke-Tests sind erst nach aktivierten Server-Gates sinnvoll.

blocked_by_api_server_gatesStatus 0/7API-Gates 7/7Runtime jasystemd API 4Public Reads 7Protected 4Deny-Fixtures

Runtime-Gates

Was der öffentliche Probe belegt

Schema
Public-Read-Exports deklariert passed

Schema, Matrix, Report-Share-Card und Badge sind als Public-Read-Flächen im Router sichtbar.

Public-Exports weiter cachebar und ohne Secret-Felder halten.
API-Runtime-Kontrollen implementiert passed

7/7 Kontrollen im Backend nachweisbar: Key-Store-Vertrag, Scope, Audit, Rate-Limit, Revocation, Domain-Claim, Write-HMAC.

Produktive Env-Gates, Migration und echte Test-Keys separat freigeben.
API-Key-Store und Access-Auditlog migriert passed

Tabellen api_keys und api_access_audit_log sind vorhanden; Audit-Events letzte 24h: 0.

Protected Endpoint mit fehlendem, falschem und später echtem Test-Key weiter prüfen.
Geschützter Operator-Probe-Endpunkt implementiert passed

/api/operator/probe prüft Bearer-Key, Scope, Revocation/Expiry und schreibt sanitisierte Audit-Entscheidungen.

Nach Secret-/Key-Freigabe echte 401/403/200-Smoke-Tests mit Test-Key ausführen.
Fallback-Audit für Deny-Smokes aktiv warning

Noch kein sanitisierter Fallback-Audit-Event in den letzten 24h sichtbar.

GET /api/operator/probe ohne Bearer-Key ausführen und Fallback-Audit prüfen.
API systemd-Service-Vertrag vorhanden passed

saferpage-api.service und scripts/run-api-service-smoke.sh sind als Runtime-Evidence dokumentiert.

systemctl status saferpage-api.service und scripts/run-api-service-smoke.sh nach jedem Deploy prüfen.
Keine Key-Ausstellung im öffentlichen Probe passed

Diese Seite erzeugt keine Keys, speichert keine Hashes und akzeptiert keine Authorization-Header.

Produktive Key-Ausstellung separat hinter Admin-Auth, Domain-Claim und Auditlog bauen.
Deny-Fixtures dokumentiert passed

4 erwartete Deny-Entscheidungen sind ohne Live-Secret ausformuliert; 1 ist bereits live auditierbar.

Nach Aktivierung der Server-Gates dieselben Faelle als echte Smoke-Tests ausführen.
Runtime-Middleware für Operator/API aktiv blocked

0/7 API-Key-Servergates aktiv.

Key-Store, Scope-Middleware, Auditlog, Rate-Limit, Revocation, Domain-Claim und Write-HMAC aktivieren.

Runtime-Implementierung

Welche API-Kontrollen im Backend vorhanden sind

Key-Readiness JSON
Key-Store/Hash-Vertrag implementiert passed

Migration und Storage-Funktionen deklarieren Prefix, Hash, Scopes, Status und Ablauf.

Mit Migration, Env-Freigaben und echten Test-Keys weiter verifizieren.
Scope-Enforcement implementiert passed

Operator-Probe weist Scope-Mismatches mit 403 ab und auditiert sie.

Mit Migration, Env-Freigaben und echten Test-Keys weiter verifizieren.
Access-Audit/Fallback implementiert passed

Postgres-Audit und File-Fallback sind implementiert; Fallback-Events 24h: 0.

Mit Migration, Env-Freigaben und echten Test-Keys weiter verifizieren.
Rate-Limit implementiert passed

Operator-Probe prüft Rate-Limits und auditiert 429-Entscheidungen.

Mit Migration, Env-Freigaben und echten Test-Keys weiter verifizieren.
Revocation/Expiry implementiert passed

Revoked/expired Keys werden vor Allow-Entscheidung abgewiesen.

Mit Migration, Env-Freigaben und echten Test-Keys weiter verifizieren.
Domain-Claim implementiert passed

Operator-Scopes brauchen Domain-Scope; Mismatches werden nur mit Hash-Evidence auditiert.

Mit Migration, Env-Freigaben und echten Test-Keys weiter verifizieren.
Write-HMAC implementiert passed

Write-Scopes verlangen HMAC-Signatur und Idempotency-Key.

Mit Migration, Env-Freigaben und echten Test-Keys weiter verifizieren.

Public Read

Diese Flächen dürfen ohne Betreiber-Key öffentlich bleiben

Export
Schema Registry GET /schemas · schemas:read

Router und Schema Registry deklarieren einen öffentlichen, cachebaren Schema-Katalog.

Feature-Matrix Export GET /vergleich/features-json · schemas:read

Konkurrenzmatrix ist als öffentlicher JSON-Export deklariert.

Public Report Share Card GET /anrufer.info/share-card-json · reports.public:read

Kanonische Domain-Reports und Share-Cards bleiben öffentlich, ohne Betreiber-Secret.

Public Badge Embed GET /badge/anrufer.info/embed-json · badges.public:read

Status-Badges sind öffentliche Trust-Links ohne interne Rohdaten.

Protected Contract

Operator- und Schreibpfade bleiben bis zu echten Gates gesperrt

Servergates
reports:read operator_read · GET

live_endpoint_denies_without_key_and_audits

reports:read operator_read · GET

blocked_until_domain_claim_scope_audit_ready

portfolio:read operator_read · GET

blocked_until_domain_claim_scope_audit_ready

evidence:read operator_read · GET

blocked_until_sanitization_and_domain_claim_ready

nachweise:write operator_write · POST

blocked_until_write_hmac_and_audit_ready

dispatch:write operator_write · POST

blocked_until_write_hmac_rate_limit_and_approval_ready

keys:rotate admin · POST

blocked_until_admin_auth_audit_and_revocation_ready

Deny-Fixtures

Erwartete 401/403-Entscheidungen vor Live-Key-Ausgabe

Runbook
deny_missing_authorization HTTP 401 · Fixture only

GET /api/operator/probe?scope=reports:read ohne Authorization

Der Live-Operator-Probe verweigert fehlende Bearer-Authorization mit 401 und schreibt sanitisiertes Audit.
deny_scope_mismatch HTTP 403 · Fixture only

GET /nachweise/anrufer.info/export mit Scope reports.public:read

Evidence-Exports brauchen evidence:read, Domain-Claim und Auditlog.
deny_missing_hmac_or_idempotency HTTP 403 · Fixture only

POST Nachweispositions-Delivery ohne X-SaferPage-Signature und Idempotency-Key

Schreibpfade bleiben bis Write-HMAC und Rate-Limit blockiert.
deny_revoked_key HTTP 401 · Fixture only

GET Portfolio-Export mit revokiertem Key-Prefix

Revocation muss vor Scope-Entscheidung wirken.

Write-HMAC

Signatur-Test für schreibende Operator-API-Clients

Key-Readiness JSON
HMAC-SHA256 X-SaferPage-Signature · X-SaferPage-Idempotency-Key

Client berechnet über exakt diesen kanonischen String dieselbe Signatur und sendet sie mit Idempotency-Key.

Öffentlicher Testfall für Operator-API-Write-Clients. Nicht als produktives Secret verwenden.
Scope
nachweise:write
Idempotency
sp-api-write-test-fixture
SHA-256
16e4a7e04cf94f5ad6bc986e
Signatur
sha256=aa2e6130e9eeb1bd9d3b92f4d