27 lines
1.3 KiB
SQL
27 lines
1.3 KiB
SQL
-- API-Tokens mit granularem Scope (ro/rw je Ressourcengruppe) fuer
|
|
-- programmatischen Zugriff auf die Admin-/Verwaltungs-API, unabhaengig von
|
|
-- der Browser-Session. Bewusst NICHT nutzbar fuer SSH/RDP/SFTP-Sitzungen
|
|
-- selbst (Terminal-/RDP-WebSocket und Dateitransfer bleiben ausschliesslich
|
|
-- an eine eingeloggte, TOTP-verifizierte Session gebunden -- siehe
|
|
-- app/auth/deps.py) und NICHT nutzbar, um weitere Tokens zu verwalten
|
|
-- (Privilege-Escalation-Schutz: Token-Verwaltung selbst bleibt reine
|
|
-- Session-Admin-Aktion).
|
|
--
|
|
-- Nur der Hash des Tokens wird gespeichert (siehe app/security/api_tokens.py,
|
|
-- analog zu Recovery-Codes); das Klartext-Token wird nur einmalig bei der
|
|
-- Erzeugung angezeigt und ist danach nicht mehr rekonstruierbar.
|
|
CREATE TABLE IF NOT EXISTS api_tokens (
|
|
id INTEGER PRIMARY KEY,
|
|
user_id INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
|
label TEXT NOT NULL,
|
|
token_hash TEXT NOT NULL UNIQUE,
|
|
token_prefix TEXT NOT NULL,
|
|
scopes_json TEXT NOT NULL,
|
|
created_by INTEGER REFERENCES users(id),
|
|
created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ','now')),
|
|
expires_at TEXT,
|
|
last_used_at TEXT,
|
|
revoked_at TEXT
|
|
);
|
|
CREATE INDEX IF NOT EXISTS idx_api_tokens_user ON api_tokens(user_id);
|