feat: connexion JSON pour l API d administration #164
No reviewers
Labels
No labels
auto-merge
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
AcadeNice/corentin_wakdo!164
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "feat/admin-api-login"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Ajoute la connexion JSON a l'API d'administration :
POST /admin/api/auth/login,POST /admin/api/auth/logout,GET /admin/api/auth/me. Objectif : une demonstrationPostman ou Bruno qui s'authentifie sans copier le cookie de session depuis un navigateur.
Le modele de securite ne change pas : meme session serveur en cookie HttpOnly +
SameSite=Strict, meme jeton CSRF synchroniseur, aucun jeton en local storage.
AuthService::authenticate()est reutilise tel quel (memes limitations par compte et parIP, meme message d'echec generique, meme regeneration de session).
Anti-enumeration : mesure du canal auxiliaire par le temps
Le leurre est calibre sur un hachage argon2id REELLEMENT STOCKE, pas sur la configuration
courante. Mesure de bout en bout sur
POST /admin/api/auth/login(pile jetable, 25 seriesentrelacees par chemin) :
Ecart maximal entre medianes : 6.0 ms, pour un ecart-type intra-echantillon de 13.8 ms --
l'ecart est sous le bruit de mesure.
Seconde mesure avec une configuration argon2 DIVERGENTE des hachages stockes (env
16384/2/1, hachages 65536/4/1), le cas qui rouvrirait l'ecart si le leurre suivait la
configuration : 256.5 / 250.7 / 252.9 ms, ecart de 5.7 ms. Un leurre calibre sur cette
configuration aurait coute 29.7 ms contre 244.0 ms pour une verification reelle (mesure
directe de
password_verify()sur cette image), soit plus de 200 ms d'ecart.Journal des tentatives non amplifiable
Une IP verrouillee est rejetee AVANT toute ecriture (
testIpLockedIsRejectedBeforeAnyWrite),ce qui borne la croissance de
audit_logetlogin_throttle; la purge cron(
docker/cron/scripts/purge-throttle.sh,purge-audit-log.sh) prend le relais. L'avisd'incident du cache est journalise une seule fois via un marqueur sur disque plutot qu'un
drapeau
staticremis a zero a chaque requete(
testCacheFailureMarkerIsWrittenOnceNotOnEveryFailure).Correction trouvee en relecture
referenceHashForDecoy()prenaitSELECT password_hash FROM user LIMIT 1. L'anonymisationRGPD garde la ligne
useren y ecrivantpassword_hash = '': servir un tel tombstonecomme reference faisait retomber le leurre sur la configuration. La requete filtre
desormais sur
password_hash <> ''et trie par cle primaire (sans tri, la ligne renduedependait du plan choisi par le moteur).
Verifications
tests/js/api-collection-secrets.test.js(5 surfaces verifiees)