2011-05-29 33 views
12

Estoy corriendo un servidor WebSocket y preguntando a mí mismo, si está cepillada, que la autenticación de clientes se llevará a cabo con apretón de manos en el futuro ... xxxx proyecto tal vez :)WebSocket

¿Tiene información? He escuchado que con draft07 se puede enviar una identificación de sesión al servidor, así que quizás eso ayude a autenticar al cliente ...

Lo que estoy haciendo atm es esperar un máximo de 10 segundos, hasta que los clientes envíen un mensaje con el encabezado de inicio de sesión, nombre de usuario y contraseña. Pero creo que esta no es "LA" solución. ¿Cómo están ustedes allá afuera haciéndolo?

Respuesta

9

El protocolo WebSockets permite intercambiar encabezados de autenticación HTTP estándar durante el protocolo de enlace. Si tiene un servidor WebSockets que se conecta a un servidor web existente como un módulo, entonces la autenticación existente en el servidor web ya debería funcionar. De lo contrario, si tiene un servidor WebSockets independiente, es posible que deba agregar el soporte de autenticación.

actualización

Como @ Jon señala, a diferencia de las peticiones HTTP/XHR normales, la API navegador no permite establecer arbitraria "X- *" cabeceras para las conexiones WebSocket. El único valor de encabezado que puede establecer es el protocolo. Esto es desafortunado. Una solución común es usar un sistema basado en tickets que dependa del mecanismo HTTP existente para autorización/autenticación y luego este ticket se pasa junto con la conexión websocket y se valida de esa manera: https://devcenter.heroku.com/articles/websocket-security

+0

Puede ser parte de las especificaciones de WebSocket, pero no es parte de la API de WebSocket en la mayoría de los navegadores. No puede enviar encabezados personalizados junto con el protocolo de enlace WebSocket en los navegadores. Consulte https://github.com/SocketCluster/socketcluster-client/issues/9 – Jon

+0

_ "a diferencia de las solicitudes HTTP/XHR normales, no puede establecer encabezados" X- * "arbitrarios para las conexiones WebSocket." _ - de hecho @Jon señaló que no puede hacerlo a través de ** WebSocket JS API **. Eso no es lo mismo que decir que no se puede hacer por * WebSocket connections *. – Madbreaks

+1

@Madbreaks buen punto. He aclarado que esto es específicamente una API del navegador WebSocket, en lugar de una limitación del protocolo WebSocket. Además, hay algunas implementaciones Node.js/JS WebSocket que le permiten establecer encabezados. Entonces realmente solo es la API del navegador W3C la que no proporciona un mecanismo. – kanaka