Аутентификация WebSockets
Каковы возможные способы аутентификации пользователя при использовании соединения с websocket?
Пример сценария: веб-многопользовательский чат-приложение через зашифрованное соединение в сети. Как я могу гарантировать (или гарантировать), что каждое соединение в этом приложении принадлежит определенному аутентифицированному пользователю и "не может быть" эксплуатировано ложным олицетворением пользователя во время соединения.
Ответы
Ответ 1
SSL/TLS может использоваться для аутентификации как клиента, так и сервера с использованием сертификатов X.509. Это зависит от используемой вами платформы веб-приложений. В apache переменная среды SSL_CLIENT_CERT может быть проверена на предмет достоверности, чтобы список известных сертификатов был действительным. Это не потребует использования полной PKI и не требует, чтобы вы покупали сертификаты для каждого клиента. Хотя я рекомендую использовать CA для подтверждения вашего сертификата ssl сервера.
Ответ 2
Если вы уже выполняете аутентификацию для части, не связанной с веб-сайтом, просто передайте cookie сеанса вместе с первым сообщением после подключения и проверьте файл cookie, как обычно.
ПРЕДУПРЕЖДЕНИЕ: Было указано, что при использовании флеш-памяти не работает следующее:
Если вы используете socket.io, это еще проще: файлы cookie автоматически передаются при подключении и могут быть доступны как:
var io = require('socket.io');
var socket = io.listen(app);
socket.on('connection', function(client){
cookies = client.headers['cookie'];
});