-- Clés d'API pour les clients hors navigateur (production-ready, P0-3). -- -- Le jeton en clair n'est JAMAIS stocké : seule l'empreinte SHA-256 l'est, le -- jeton complet n'est affiché qu'une seule fois à la création. Le préfixe sert -- à l'affichage / identification sans exposer le secret. CREATE TABLE IF NOT EXISTS api_keys ( id TEXT PRIMARY KEY, user_id TEXT NOT NULL REFERENCES users(id) ON DELETE CASCADE, name TEXT NOT NULL, key_hash TEXT NOT NULL UNIQUE, -- sha256hex du jeton complet prefix TEXT NOT NULL, -- 8 premiers caractères, affichables created_at TEXT NOT NULL, last_used_at TEXT, revoked_at TEXT ); CREATE INDEX IF NOT EXISTS idx_api_keys_hash ON api_keys(key_hash); CREATE INDEX IF NOT EXISTS idx_api_keys_user ON api_keys(user_id);