пароль отправляется без криптования
без SSL пининга можно и покриптовать пароль, но это нужно далеко не всем.
На сервере пароль криптуется SHA256
не криптуется а хэшируется, и лучше хэшировать в BCRYPT (или SCRYPT даже но я бы еще подождал пару годиков)
после чего происходит поиск по бд пары логин-криптованный_пароль соответствующий введенным данным
Ммм... шансы конечно малы... я бы даже сказал мизерные, но мы таким образом становимся уязвимыми к тайминг атакам. На данный момент адекватный алгоритм - это поиск по логину (идентити, логин или email или что вы там используете для идентификации пользователя) а затем сверяем хэши паролей посимвольно:
var matches = true;
for(var i = 0; i < 1024; i++) {
if (str1[i] !== str2[i]) matches = false;
}
почему так убого? потому что почитайте про тайминг атаки. Есть даже задокументированный случай с эксплуатацией тайминг атак для подбора коллизий к хэшам через интернет (то есть с задержками порядка 10 и более милисекунд)! Правда для этого надо сделать пару миллионов запросов ну да несуть.
Серверный socket.io ищет в бд пользователя с этим wskey
Еще хорошая идея - socker.io серверный спрашивает у сервера авторизации правильный wskey или нет но это если вы упарываетесь по масштабированию.
Если есть какие-то ошибки в написанном - пожалуйста, раскритикуйте)
В целом все верно. А если не загоняться такими вещами как разделение ответственности (мол у вас отдельно socket-io сервер и отдельно приложение) то можно еще и JWT юзать. Тогда нам вообще не надо ничего нигде хранить а проверять валидность можно по подписи токена. Да и реализация готовая есть.