Mi aplicación está ejecutando una autenticación de API que usa tokens en lugar de cookies.
Esto me lleva a hacer algunas preguntas:
- ¿Cuál es la forma más segura de almacenar el token?
Al utilizar tokens aleatorios, elimina el problema de los ataques CSRF, pero en el otro lado no hay indicadores Secure
y HTTPOnly
.
Pensé que tal vez usar algún tipo de truco con las nuevas características ECMAScript Harmony Object.freeze()
y Object.seal()
, pero esto parece ser más un hack que algo que sería seguro.
- ¿Cómo debo autenticar
WebSocket
clientes comoSocket.io
encima de HTTPS?
La mayoría de las bibliotecas como Socket.io
, ws
, Sockjs
y Faye
no permiten configurar encabezados HTTP personalizados o no es compatible con los diversos protocolos de respaldo como los sockets Flash.
Una posibilidad sería enviar el token como parte del protocolo de enlace en los argumentos de consulta de la URL, pero realmente no me gusta porque significa que:
1): los tokens se mostrarán en los archivos de registro que solo registran la URL
2): tendría que autenticarme primero durante el protocolo de enlace y luego cada vez que envíe datos, lo que significaría dos sistemas separados.
Eso está encima de mi cabeza pensando un poco al respecto. Puede haber más problemas subyacentes.
- ¿Soy demasiado paranoico y esta opción es realmente segura?
También podría implementar algún tipo de esquema asimétrico utilizando un sistema de clave pública / privada, pero esto parece simplemente propenso a errores / complicado para ser una solución confiable.
Mi pregunta final es más una consecuencia de las preguntas anteriores:
- ¿Vale la pena el hecho de tener tokens aleatorios en lugar de cookies?
Por un lado, no tienes vulnerabilidades de ataque CSRF, pero por otro lado tienes muchos otros casos en los que las respuestas (al menos para mí) no parecen ser tan claras.
¡Gracias de antemano!