ADR 0046 – Compte de service des comptes de l'équipe BioTrace
Statut : Décidée. Date : 04/10/2026. Prolonge l’ADR 0044 et reprend le principe d’EC-042 (un compte de service par usage, droits minimaux).
Contexte
Section intitulée « Contexte »Les membres de l’équipe BioTrace n’ont aucune ligne en base (EC-099) : ce sont des comptes Keycloak portant un rôle de royaume editeur_*. Le cockpit doit permettre au super administrateur de les créer, de changer leur rôle, de les désactiver et de réinitialiser leur mot de passe. Le compte biotrace-api ne peut ni lire les rôles du royaume ni les attribuer ; biotrace-api-organisations détient manage-realm, bien trop large pour cet usage.
Décision
Section intitulée « Décision »Un troisième client Keycloak confidentiel, biotrace-api-equipe, avec compte de service, secret BIOTRACE_API_EQUIPE_CLIENT_SECRET, et seulement view-realm, view-users, query-users, manage-users et query-groups du client realm-management. Il ne peut rien sur les clients, le royaume ni les fournisseurs d’identité.
- Une seule classe l’utilise :
EquipeKeycloakReelle(apps/api/src/identite/keycloak/equipe.ts), derrière le portEquipeKeycloak. Le client officiel reste confiné au moduleidentite(KC-18). - Garde-fou dans la classe : toute opération sur un compte vérifie d’abord qu’il porte un rôle
editeur_*. Un compte client n’est jamais modifié par ce port, même avec un identifiant valide. Un compte porte un seul rôle de l’éditeur. - À la création : rôle attribué et groupe
second_facteur_exige; si une étape échoue, le compte est supprimé. - Sans secret, les routes de l’équipe répondent
502 identite_indisponible; le reste du cockpit n’est pas touché.
Alternatives écartées
Section intitulée « Alternatives écartées »- Étendre
biotrace-api(view-realm) : un compte déjà capable de créer des utilisateurs clients gagnerait le droit de leur attribuer des rôles de l’éditeur. - Réutiliser
biotrace-api-organisations:manage-realmpermet de tout modifier dans le royaume. - Gérer l’équipe à la main dans la console Keycloak : aucune trace côté BioTrace, aucun garde-fou (dernier administrateur, auto-désactivation), second facteur oublié.
Conséquences
Section intitulée « Conséquences »Un secret de plus à fournir par le pipeline (recette, production). Aucune dépendance de code nouvelle. Les actions du super administrateur sur l’équipe sont journalisées dans app.action_equipe (ajout seul, sans mot de passe).
Stratégie de sortie
Section intitulée « Stratégie de sortie »La classe ne connaît que cinq opérations (lister, creer, changerRole, changerEtat, reinitialiserMotDePasse). Revenir à une gestion manuelle revient à retirer les cinq routes /v1/editeur/equipe et le client du royaume.