Aller au contenu

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).

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.

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 port EquipeKeycloak. Le client officiel reste confiné au module identite (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é.
  • É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-realm permet 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é.

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).

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.