Guide d'action

Attrape le credential stuffing et le brute force tôt

POST/v1/events · user.login.failed

Émets un event `user.login.failed` à chaque connexion échouée, que l'email existe ou non. L'IP et la raison permettent d'agréger sur une fenêtre et repérer les attaques distribuées avant qu'elles n'aboutissent.

Quand l'émettre

Dans ton handler d'auth, juste après un échec de mot de passe ou un magic link rejeté. Émets même quand l'email ne correspond à aucun user, l'attaquant sonde quand même.

Payload d'exemple
await recalled.events.create({
  action: "user.login.failed",
  actor: { id: user.id, email: user.email },
  organization: user.organizationId,
  metadata: {
    ip: "203.0.113.42",
    userAgent: "Mozilla/5.0",
    reason: "value"
  },
});
Metadata à inclure

Garde les metadata plates et cohérentes dans ton service pour que recherche et exports CSV fonctionnent bien.

CléRôle
ipAdresse IP source de la requête
userAgentUser agent du client
reasoninvalid_password, expired_link, unknown_email, locked_account
Rétention recommandée

Garder au moins 90 jours, plus si tu fais de la détection d'anomalies ou si tu enquêtes a posteriori sur des incidents.

Actions liées