feat(ra-console): préparation des actions signées approve/reject (étape 3a) - #64
Open
PhilippeVienne wants to merge 1 commit into
Open
PhilippeVienne wants to merge 1 commit into
PhilippeVienne wants to merge 1 commit into
Conversation
…pe 3a) docs/WEBUI.md §15 étape 3, schéma de signature §4 étapes 1 à 3 : `POST /api/v1/webauthn/challenge` relaie à ca-server (`/internal/v1/challenge`) l'action demandée par l'opérateur connecté ; ca-server la fige et rend le corps qu'il exécutera, son empreinte et les options WebAuthn. - Le challenge vise l'opérateur de la session : `operator_hint` vient de la session (Authenticated gagne `operator_id`), jamais du navigateur. L'action est relue dans l'énumération fermée d'oe_actions puis resérialisée : un champ en trop ne franchit pas la console. - Seuls approve_request et reject_request sont préparés à ce stade (403 action_not_available sinon, sans solliciter ca-server). Le rôle et l'état de la demande restent jugés par ca-server. - Journal de la console : ra.action_challenge (AppState gagne `journal`). - action_challenge.rs, contre le vrai service d'actions de ca-server et PostgreSQL ; trois mutations tuées (indice venu du navigateur, filtre de l'étape, session non exigée). - docs/RA-CONSOLE.md mis à jour. Co-authored-by: Claude <noreply@anthropic.com>
This was referenced Sep 27, 2026
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.
Objet
docs/WEBUI.md§15 étape 3 (actions RA signées), tranche 3a du découpage validé (3a : préparation du challenge → 3b : exécution avec lien à la cible contrôlé parca-server). Schéma de signature §4, étapes 1 à 3. Basedev, indépendante des autres PR ouvertes.Côté
ca-server, tout existait déjà (oe-actions:/internal/v1/challengefige l'action,/internal/v1/actionsl'exécute sur assertion) ; il manquait le relais dansra-console.POST /api/v1/webauthn/challenge(session obligatoire) : le corps est l'action, dans la forme d'oe_actions({"action": "approve_request", "transaction_id": "…", "comment": "…"}). La console relaie àca-server, qui rend le corps figé,body_hash,action_id,challenge_idet les options WebAuthn.operator_hintvient de la session (Authenticatedgagneoperator_id), jamais du navigateur. L'action est relue dans l'énumération fermée puis resérialisée : un champ en trop ne franchit pas la console.approve_request/reject_requestsont préparés à ce stade ; toute autre action →403 action_not_available, sans solliciterca-server(révocation : étape 4).ca-server, pas par la console (§3) : un administrateur ne peut pas approuver, la console relaie le refus.ra.action_challenge(opérateur, action,action_id,body_hash, statut), rapprochable du journal deca-server;AppStategagnejournal.docs/RA-CONSOLE.md: la nouvelle route, et la section « ce qui n'existe pas encore » corrigée (elle disait la connexion absente).Limites
/internal/v1/actionsun champexpectcontrôlé parca-server, pour qu'une assertion obtenue pour la demande A ne puisse pas être présentée sur/requests/B/approve(décision de l'utilisateur : contrôle côtéca-server).Vérifications
bin/ra-console/tests/action_challenge.rs, contre le vrai service d'actions deca-server(routeur interne réel, mTLS) et un vrai PostgreSQL, authentificateur logiciel : challenge émis pour les clés de la session même si le navigateur glisse l'identifiant d'un autre opérateur ; rien de figé sans session, hors étape 3, pour une action inconnue ou un corps non JSON ; refus deca-serverpour un administrateur et pour une demande inconnue.operator_hintrepris du navigateur, filtre de l'étape 3 retiré, session non exigée.cargo fmt --check,cargo clippy --workspace --all-targets -- -D warnings(1.97 et 1.98.1),cargo test --workspaceavec PostgreSQL,cargo audit --ignore RUSTSEC-2023-0071: verts. Aucune nouvelle dépendance normale dera-console(no_pkcs11.rsvert).Revue humaine obligatoire
Voir PROVENANCE.md. Chaque case est cochée par le
contributeur humain qui valide la PR, après l'avoir fait lui-même.
make licenses)Assistance par IA
Co-authored-by: Claude <noreply@anthropic.com>, auteur et committer restent humains, etscripts/provenance.py archivea été lancé