IAM admin force-revoke le TOTP d'un user cible + kill toutes ses sessions
POST/onboarding/v0/admin/users/:user_id/mfa/totp/revoke
ADR-0019 (sub-projet F.1) — IAM admin endpoint, gated par
@requires_roles(IAM_ADMIN, scope=iam:admin) +
@requires_recent_mfa(SENSITIVE=60s) sur la session de
l'admin. Atomique : marque le PersistentTotpSecret REVOKED
(state=revoked, revoked_at=now) et invalide TOUTES les
AuthSession actives du user cible avec
revoked_reason=ADMIN_FORCE_REVOKE_TOTP.
Diverge du self-revoke (sub-projet E) sur 3 points :
- Self-target interdit (400 cannot_self_target) — l'admin agit sur un user DIFFÉRENT.
- Bypass du check
would-lockout(action légitime fraude/compliance — lockout est intentionnel). - Session-kill inconditionnel (incident-response). Sessions tuées même s'il n'y a pas de TOTP active à révoquer.
Audit : actor_user_id, target_user_id, request_id,
totp_secrets_revoked_count, sessions_revoked_count,
revoked_reason loggés via structlog.
Request
Responses
- 200
- 400
- 401
- 403
- 404
- 500
TOTP révoqué + sessions invalidées
Self-target interdit (code=cannot_self_target). L'admin doit utiliser le self-revoke endpoint pour son propre TOTP.
Unauthorized
Soit l'appelant n'a pas le rôle IAM_ADMIN, soit le claim
mocosag_last_mfa_verified_at de sa session est trop
ancien (> 60s pour la tier SENSITIVE).
User cible introuvable (code=user_not_found). Réponse identique pour user inexistant et user soft-deleted — pas de leak d'existence.
Unexpected error