feat(ra-console): double contrôle, co-signature et salle d'attente (étape 4b) - #67
Open
PhilippeVienne wants to merge 1 commit into
Open
PhilippeVienne wants to merge 1 commit into
PhilippeVienne wants to merge 1 commit into
Conversation
…tape 4b)
docs/WEBUI.md §8, §15 étape 4 : deux ca_operateur distincts révoquent
ensemble depuis la console.
- Co-signature : `POST /api/v1/webauthn/challenge` accepte
`{"action_id"}` (action existante, non exécutée, proposée à ce stade),
puis `POST /api/v1/quorum/{action_id}/sign`. oe_actions::Expect gagne
`action_id`, comparé avant toute consommation : une co-signature ne
compte que pour l'action pour laquelle son challenge a été émis.
- Salle d'attente : `GET /api/v1/quorum?state=PENDING` lit `actions` et
`decision_evidence` de ca-server en lecture seule (décision de
l'utilisateur) : corps figé, empreinte, signatures, signataires. Le
rôle de la console gagne SELECT sur `actions` (aucun secret n'y
figure) ; le test de schéma est mis à jour.
- Écart assumé avec le §8, en plus sûr : pas de tables de collecte, la
console ne conserve jamais d'assertion (ca-server enregistre chaque
signature au fil de l'eau). WEBUI.md §8 dit ce qui est construit.
- Tests : révocation à deux de bout en bout, seconde signature du même
opérateur refusée, exécution unique, co-signature présentée pour une
autre action sur le même certificat refusée. Deux mutations tuées.
- Mise à jour d'un déploiement : rejouer ra_console_grants.sql.
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§8 et §15 étape 4, tranche 4b : deuxca_operateurdistincts révoquent ensemble depuis la console. Empilée sur #66 (feat/ra-console-revoke, têteaac4dbcà l'ouverture) → #65 → #64. Ordre de merge : #64, #65, #66, cette PR.POST /api/v1/webauthn/challengeaccepte{"action_id"}(la console vérifie que l'action existe, n'est pas exécutée et relève des actions proposées), puisPOST /api/v1/quorum/{action_id}/sign.oe_actions::Expectgagneaction_id, comparé parca-serveravant toute consommation : une co-signature ne compte que pour l'action pour laquelle son challenge a été émis.GET /api/v1/quorum?state=PENDING— corps figé (à afficher à qui co-signe), empreinte, signatures recueillies/exigées, qui a déjà signé. Lue en lecture seule dansactionsetdecision_evidencedeca-server(décision de l'utilisateur) : le rôle de la console gagneSELECTsuractions(aucun secret n'y figure : le jeton d'une invitation n'existe que dans le résultat d'exécution). Le test de schéma (operators_schema.rs) est mis à jour en conséquence.ca-serverenregistre chaque signature au fil de l'eau (decision_evidence,UNIQUE(action_id, operator_id)) et n'exécute qu'au seuil.docs/WEBUI.md§8 dit désormais ce qui est construit.docs/RA-CONSOLE.md: salle d'attente, co-signature, note de mise à jour.Avec #64 à #66, l'étape 4 est complète côté API : révocation d'un certificat à deux opérateurs FIDO2 distincts, sans le CLI.
Rejouer
psql -f crates/oe-castore/sql/ra_console_grants.sql(idempotent) : sans le nouveauSELECTsuractions, la salle d'attente et la co-signature répondent503.Vérifications
bin/ra-console/tests/action_challenge.rs(vrai service d'actions deca-server, vraie CA sur PostgreSQL) : révocation à deux de bout en bout (salle d'attente → co-signature →EXECUTED→ certificat révoqué → salle vide → action exécutée plus préparable) ; seconde signature du même opérateur refusée ; co-signature présentée pour une autre action visant le même certificat refusée (action_mismatch, rien consommé), puis acceptée pour la bonne ; action inconnue ou identifiant invalide → 404. Test unitaire d'Expectétendu.action_idretiré côtéca-server;action_idnon envoyé par la console. Le premier jet du test ne l'aurait pas vu (deux certificats différents : le numéro de série suffisait) — corrigé en faisant porter les deux actions sur le même certificat.cargo fmt --check,cargo clippy --workspace --all-targets -- -D warnings(1.97 et 1.98.1),cargo test --workspaceavec PostgreSQL (droits réels compris :db_guard.rs,operators_schema.rs),cargo audit --ignore RUSTSEC-2023-0071: verts.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é