Обычно для аутентификации на веб-сервисе я пользовался следующим алгоритмом: после нажатия на кнопочку login пользователь перебрасывался на https-страничку ввода логина-пароля, сервер сверял хэш пароля с хэшем из БД для соответствующего логина и если все ОК, отсылал пользователю куку и возвращал его на нешифрованную страничку.
Но с https постоянная проблема: надо генерировать свои сертификаты и объяснить пользователю, что при запросе браузера на подтверждение, нужно жамкнуть «да».
Тут я придумал такое решение, работающее безо всяких SSL: пользователь вводит логин-пароль, получает от сервера некий случайный ключ, прислюнивает в качестве соли хэш своего пароля и полученный хэш отправляет обратно серверу. У того уже есть хэш пароля, и он выполняет такую же операцию. Если результат одинаковый, пользователю высылается ключ, который сохраняется не в куках, а в localStorage (по-моему, это удобней). При последующих соединениях пользователь лишь указывает этот ключ. А сам ключ имеет определенное время жизни. При желании его можно тем же самым методом обновлять, не требуя у пользователя перелогина (если, конечно, он не закроет страничку и не выждет времени отзыва ключа).
Как вам такая идея? Взлетит? Больше всего меня беспокоит устойчивость метода к атаке man-in-the-middle.