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 |
|---|---|
ip | Adresse IP source de la requête |
userAgent | User agent du client |
reason | invalid_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.