Seguridad

Block-Auth demuestra quién es el usuario. Mantener esa prueba segura en tu app depende de unas pocas reglas. Si las sigues, tu integración no se puede suplantar desde el navegador.

Tus claves

ClaveDónde vaPor qué
apiKeyFrontend y backend.Es pública: solo dice qué app llama.
apiSecretSolo tu backend, en una variable de entorno o un gestor de secretos.Demuestra que la petición viene de tu servidor.
  • La API nunca recibe el apiSecret tal cual: envías su hash SHA-256. Trata el hash también como secreto: es lo que acepta la API y la clave que firma tus webhooks.
  • Mantén el secret fuera de tu código, tu repositorio, tus logs y tus informes de errores.
  • Usa una app por entorno. Así un secret de desarrollo o de pruebas nunca abre producción.

Si se filtra tu secret

El Dashboard todavía no permite rotar el apiSecret por tu cuenta. Si crees que se ha filtrado:

  1. Contacta enseguida con el soporte de Block-Auth, indicando tu API key y nunca el secret.
  2. Elimínalo de donde quedó expuesto (repositorio, logs, un archivo compartido) y revisa quién tuvo acceso.
  3. Revisa la actividad reciente con /api/logs por si hay logins que no reconoces.

Comprueba siempre state

En el login por redirección, tu backend envía un state y lo recibe de vuelta con el código. Compruébalo antes de canjear el código.

  • Genera un valor aleatorio nuevo en cada login y guárdalo en la sesión del usuario.
  • En el callback, compáralo con el state que recibes. Si no coincide o falta, detente.
  • Sin esta comprobación, un atacante puede hacer que el navegador de una víctima termine un login que empezó el atacante, y la víctima acaba con la sesión del atacante.

El widget hace lo equivalente por ti con PKCE: ahí no necesitas state.

Cuánto dura una sesión

/api/auth/token devuelve signedExpiredAt: el momento en que caduca la firma del usuario para tu app. Cada usuario elige esa duración en Identity, dentro de los límites que tu app fija en el Dashboard. Por defecto es 1 hora, entre 30 segundos y 24 horas.

  • No dejes que tu sesión dure más que signedExpiredAt. Cuando pase, pide al usuario que vuelva a iniciar sesión.
  • Cierra la sesión cuando recibas el webhook signout.
  • Cuando el usuario cierre sesión en tu app, llama también a /api/auth/signout, para que la sesión se cierre también en sus otros dispositivos.

Solo en tu backend

  • El apiSecret y su hash.
  • Los tokens de acceso de /api/signin: la API de datos es solo para tu backend.
  • La decisión de quién es el usuario. Tu backend crea su sesión solo con la address que recibe de /api/auth/token, nunca con una dirección que envía el navegador.

Tu propia cookie de sesión debe ser HttpOnly, Secure y SameSite=Lax, y tu sitio debe funcionar con https.