Estoy creando la API para un complemento de SPA y Chrome con Rails, y estoy dispuesto a usar cookies seguras de HTTPOnly para la autenticación porque:
- Esta es la solución predeterminada para las bibliotecas de autenticación de Rails estándar como Devise y Sorcery.
- Rails ha cifrado las sesiones del lado del cliente, lo que significa que no hay requisitos de almacenamiento del lado del servidor o búsqueda de base de datos (sí, sé que todavía necesitaré algún tipo de seguimiento y búsqueda del lado del servidor si quiero implementar la invalidación de sesión adecuada).
- Es transparente para las bibliotecas cliente basadas en la web.
- Las cookies están un tanto endurecidas en comparación con el almacenamiento local, y el espacio del problema está pisado y entendido.
Al habilitar el modo API de Rails, se deshabilitan las cookies y la protección CSRF, por lo que he vuelto a habilitar las cookies, pero la protección CSRF no es tan fácil de volver a habilitar porque asume que primero se procesará un formulario (es decir, no una solicitud POST que viene en frío) y probablemente requerirá un poco de manipulación para configurar.
Si las cookies están deshabilitadas, entiendo que CSRF no es un problema, sin embargo, por lo que puedo decir, no hay forma de que un sitio malicioso falsifique una solicitud para el tipo application/json
sin usar XHR, lo cual no sería permitido sin la autorización explícita de CORS.
¿Es un buen modelo de seguridad para autenticar una API JSON con cookies pero no un token CSRF que asuma la validación adecuada del tipo de contenido?