Repository navigation
Story 32-5b : l'authentification par clé MCP (refs #723) - #752
Merged
Merged
Conversation
- auth/api_key.rs : MCP_PREFIX (kesh_mcp_), generate_mcp_key ; un cœur commun generate_prefixed pour le PAT, la clé MCP et le jeton de réinitialisation (un seul OsRng.fill_bytes). - services/acces.rs : Portee devient l'alias de kesh_db::entities::McpScope (cinq portées, une seule énumération). - services/cles_mcp.rs (neuf) : authentifier(&Lecture, &Trace, jeton) — préfixe exact avant tout accès à la base, recherche sur la Lecture, créateur actif et Administrateur (ROLE_CLE_MCP), dernière utilisation best-effort sur la Trace ; même 401 pour chaque refus, erreur de base propagée. - repositories/mcp_keys.rs : un seul avertissement au chemin d'authentification (R5 de la revue de la 32-5a). - Tests : cles_mcp_e2e.rs (neuf), clé restaurée qui authentifie (admin_full_import_e2e.rs), refus de portée par les quatre autres portées (services_motif.rs, services_rollout.rs). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…(refs #723) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… (refs #723) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- E1 : identifiants de société et d'utilisateur distincts dans les montages (société leurre dans cles_mcp_e2e.rs, second administrateur créateur dans le test de la clé restaurée), assertés. - B1 = E3 : find_active_auth_by_key_hash exige un créateur de la société de la clé (u.company_id = k.company_id), avec son test ; le test orphelin monte un créateur orphelin de la même société, pour que JOIN companies reste seul à le refuser. - B3 = E4 : la clé révoquée revient révoquée, celle révoquée après l'export revient active (revoked_at relu après l'import). - E6 : trois jetons hostiles portant le préfixe. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…n (refs #723) Change Log, registre (C-32-5-43, C-32-5-44), reports au § Pour la 32-5c (E5, B2, A2), annotation de la ligne de sprint-status (A1). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- R1 : societe_absente_refusee monte un créateur orphelin de la même société absente, sur la même connexion, pour que seule la jointure à companies refuse la clé. - R2 : les textes qui énumèrent les refus nomment le créateur d'une autre société (cles_mcp.rs, mcp_keys.rs). - R3 : doc-comment de jetons_hostiles_avec_le_prefixe. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…n (refs #723) Change Log, annotation de l'AC-b3 et de C-32-5-41. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Deuxième partie de la Story 32-5, après la 32-5a (#751) : la clé MCP devient un moyen d'authentification. Aucune route ne l'expose encore. Les routes de gestion viennent en 32-5c ; l'endpoint
/mcp, en 32-6.Ce qui est livré
MCP_PREFIX = "kesh_mcp_"etgenerate_mcp_key;generate_prefixed, partagé avec le PAT et le jeton de réinitialisation, ce qui réduitOsRng.fill_bytesà une seule occurrence.Porteedevient un alias dekesh_db::entities::McpScope.services::cles_mcp::authentifier(&Lecture, &Trace, jeton):Lecture, la dernière utilisation par laTrace;u.company_id = k.company_id.kesh_mcp_présenté à/api/v1rend 401, en en-tête comme en cookie, et un PAT n'authentifie pas une clé MCP.Revue de code
Les deux LOW de la P3 sont tracés sur #738.
Mutations : 13 jouées (12 distinctes), toutes tuées.
Gates au dernier commit de code
e64ef129mainn'a pas bougé depuis la base de la branche (b723e3d9).Liée à #723.
🤖 Generated with Claude Code