ADR-050 — Bot protection (signup)

Architecture decision record — status: Accepted.

Source: docs/adr/ADR-050-bot-protection.md

ADR-050: Bot protection (signup)

Estado

Accepted — 2026-08-23
Amendment — 2026-08-28: Cloudflare Turnstile activo en flujos de auth públicos (paridad IVPrior ADR-043).

Decisión

V1:

  • Rate limit de signup/login (ADR-049).
  • Email verification antes de mailbox/send (ADR-048).
  • Cloudflare Turnstile en login, signup y forgot-password (org + platform), con bypass cuando TURNSTILE_SECRET_KEY / NEXT_PUBLIC_TURNSTILE_SITE_KEY están vacíos o TURNSTILE_ENABLED=false.

Reset-password y accept-invite no llevan Turnstile (token de un solo uso en el enlace).

APIs de producto autenticadas: JWT, no captcha.

Implementación

CapaPiezas
WebTurnstileField, useTurnstileToken, @marsidev/react-turnstile
APITurnstileVerifierService, assertTurnstileVerified en identity + platform auth

Variables: ver .env.example (TURNSTILE_SECRET_KEY, TURNSTILE_ENABLED, NEXT_PUBLIC_TURNSTILE_SITE_KEY).