Version 0.18.0 : jetons OAuth chiffrés, appelant Nest sous Node 24 #127
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "dev"
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?
Ce que ça livre
Les jetons OAuth de
accountsont chiffrés, sans condition (D-060), mineur.Un jeton délégué (HQ) permet d'agir sur une API au nom de la personne : stocké en clair, une copie de la base suffirait à s'en servir.
creerAuthpose doncaccount.encryptOAuthTokens, avec la cléAUTH_SECRET.La première version (#126) ne l'activait qu'en présence d'un fournisseur délégué. Or better-auth ne déchiffre que si l'option est active, et elle vaut pour toute la table : un délégué retiré ou à moitié configuré aurait fait relire les jetons chiffrés tels quels, Microsoft compris, sans que rien ne le signale au démarrage.
auth.api.getAccessToken, jamais dans la table.revoquerChezFournisseurrefuse une valeur qui a la forme d'un jeton chiffré : sinon la RFC 7009 répondrait 200, et la fonction annoncerait une révocation qui n'a pas eu lieu.AUTH_SECRETrend désormais illisibles les jetons deaccount(cahier, §6).Le gestionnaire Nest retrouve son appelant sous Node 24 (D-061, chasse 38), correctif.
La garde posait le principal par
enterWithaprès unawait. Sous Node 24.15, il n'atteignait pas le gestionnaire : chaque appel délégué de Nuage partait en 500 « hors requête », et l'on-behalf-of refusait faute d'assertion. Désormais, la garde retient le principal, etEqsAppelantInterceptor, monté parEqsAuthModule.forEqs, exécute le gestionnaire dansavecAppelant.poserAppelantest déprécié, etrxjsdevient une dépendance pair facultative.Le test monte une application Nest réelle interrogée par HTTP : 3 cas sur 4 échouaient avant le correctif, 4 sur 4 passent après.
Ce que les satellites ont à faire
EqsAuthModule.forEqs.account: passer pargetAccessToken.Vérifié / non vérifié
pnpm checkest vert sous Node 24.15.runqui englobe) ne dépend pas de la version, mais le test n'a pas été joué sous Node 22.enterWith(chasse 38).🤖 Generated with Claude Code
La garde posait le principal par `AsyncLocalStorage.enterWith`, après l'`await` de `resoudrePrincipal`. Sous Node 24.15 ce magasin reste dans la suite de la garde : `appelantCourant()` rendait `undefined` dans le gestionnaire, et chaque appel délégué de `@eqs/http` partait en 500 « hors requête » (relevé par nuage) ; l'assertion de l'on-behalf-of aussi. La garde retient désormais `{ principal, assertion }` dans une WeakMap indexée par la requête ; `EqsAppelantInterceptor`, monté en APP_INTERCEPTOR par `EqsAuthModule`, appelle et souscrit `next.handle()` dans `avecAppelant`. `canAccess` tourne aussi dans `avecAppelant`. `poserAppelant` reste exporté, déprécié. `rxjs` devient un pair facultatif. Test : une application Nest réelle interrogée par HTTP (clé API, jeton Entra, deux requêtes concurrentes) — rouge avant sous Node 24.15, vert après. D-061, chasse 38, cahier §4.5, changeset patch. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>