Tengo un sitio PHP tradicional que usa sesiones. He desarrollado una aplicación en tiempo real en nodejs y deseo autenticar a los usuarios aquí en función de su sesión de PHP. El procedimiento sería algo como esto:
- La página getAuthToken.php del cliente AJAX
- El cliente se conecta al servidor websocket de forma anónima
- El cliente envía su token de autenticación
- El servidor comprueba el token, autentica al usuario
getAuthToken.php debe generar un token de autenticación para el nombre de usuario de la sesión actual usando alguna clave simétrica (compartida por el servidor websocket) y devolverla.
¿Cuál sería el mejor algoritmo para usar aquí? Tengo poca experiencia con la criptografía y no estoy seguro de dónde proceder.
Un enfoque que viene a la mente sería que SHA-2 incluya el nombre de usuario junto con alguna clave secreta. Luego pasaríamos el nombre de usuario y este hash al servidor websocket que haría lo mismo y compararía los hashes. Incluya una marca de tiempo con el hash para garantizar un token único cada vez.
¿Es seguro el enfoque anterior? ¿Hay un mejor enfoque? No me preocupa nada en el cable, usaremos SSL para todas las comunicaciones; mi única preocupación es la capacidad de suplantar a otros usuarios generando un token falso a través de la inspección de su propio token. El algoritmo debe ser compatible tanto en PHP como en el nodo.
¿Seguro que hay alguna forma estándar de hacer esto?