@eqs/platform-next : withApi n'accepte ni principal résolu par l'application, ni « session seule », ni permission calculée #140

Closed
opened 2026-10-12 10:44:39 +00:00 by nicolas-fryder · 1 comment

Commande

GET /api/moi (ou toute route withApi, même public: true) avec Authorization: Bearer eqoauth_at_<jeton valide> — le jeton qu'ATLAS émet au hub MCP par son serveur OAuth.

Attendu

Un point où l'application résout un troisième principal (auth.resoudreAutre(brut, headers) ou équivalent), ainsi que deux options par handler :

  • session: true — principal user ET aucun Authorization : un agent qui agit au nom de quelqu'un ne consent pas à sa place (jeu, signalements, liaison d'un compte tiers) ;
  • permission: (params) => string — le droit calculé d'après le chemin (POST /api/v1/outils/[nom] : une permission par outil).

Observé

resoudrePrincipal LÈVE « Jeton non reconnu » sur tout Bearer qui n'est ni une clé (API_KEY_PREFIX) ni un JWT, y compris sur une opération publique. Aucune des deux options n'existe.

Versions

@eqs/platform-next 0.20.0, @eqs/auth 0.20.0.

Contournement

src/lib/api.ts d'ATLAS place sa garde DEVANT un withApi du socle construit sans identité (public: true, Authorization retiré), puis pose le principal par avecAppelant. Conséquences : la garde tourne hors du span de l'opération, et /api/moi comme /api?mine=1 refusent le jeton du hub.

Ouvert depuis le rejeu du rétrofit d'ATLAS (étape 7a).

## Commande `GET /api/moi` (ou toute route `withApi`, même `public: true`) avec `Authorization: Bearer eqoauth_at_<jeton valide>` — le jeton qu'ATLAS émet au hub MCP par son serveur OAuth. ## Attendu Un point où l'application résout un troisième principal (`auth.resoudreAutre(brut, headers)` ou équivalent), ainsi que deux options par handler : - `session: true` — principal `user` ET aucun `Authorization` : un agent qui agit au nom de quelqu'un ne consent pas à sa place (jeu, signalements, liaison d'un compte tiers) ; - `permission: (params) => string` — le droit calculé d'après le chemin (`POST /api/v1/outils/[nom]` : une permission par outil). ## Observé `resoudrePrincipal` LÈVE « Jeton non reconnu » sur tout `Bearer` qui n'est ni une clé (`API_KEY_PREFIX`) ni un JWT, y compris sur une opération publique. Aucune des deux options n'existe. ## Versions @eqs/platform-next 0.20.0, @eqs/auth 0.20.0. ## Contournement `src/lib/api.ts` d'ATLAS place sa garde DEVANT un `withApi` du socle construit sans identité (`public: true`, `Authorization` retiré), puis pose le principal par `avecAppelant`. Conséquences : la garde tourne hors du span de l'opération, et `/api/moi` comme `/api?mine=1` refusent le jeton du hub. *Ouvert depuis le rejeu du rétrofit d'ATLAS (étape 7a).*
Author
Owner

Même famille, vu au lot de clôture : public: true ne suffit pas à ouvrir une route à un appelant qui porte un Authorization que le socle ne connaît pas.

Commande : POST /api/oauth/token (route withApi, public: true) avec Authorization: Basic <client_id:secret> — ce qu'envoie un client OAuth (RFC 6749 §2.3.1).
Attendu : le handler reçoit la requête, en-tête compris.
Observé : 401 « Schéma d'autorisation non reconnu » : le principal est résolu même pour une opération publique.

Contournement : ATLAS a une troisième forme, publique.withApi, réservée à une liste fermée de fichiers (portes permission-coverage et operations) — auth/config, les alias OAuth, les deux .well-known.

Même famille, vu au lot de clôture : `public: true` ne suffit pas à ouvrir une route à un appelant qui porte un `Authorization` que le socle ne connaît pas. **Commande** : `POST /api/oauth/token` (route `withApi`, `public: true`) avec `Authorization: Basic <client_id:secret>` — ce qu'envoie un client OAuth (RFC 6749 §2.3.1). **Attendu** : le handler reçoit la requête, en-tête compris. **Observé** : 401 « Schéma d'autorisation non reconnu » : le principal est résolu même pour une opération publique. Contournement : ATLAS a une troisième forme, `publique.withApi`, réservée à une liste fermée de fichiers (portes `permission-coverage` et `operations`) — auth/config, les alias OAuth, les deux `.well-known`.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
Infrastructure/eqs-platform#140
No description provided.