Вот как так может быть, что технологии как бы развиваются, а по поводу аутентификации в вебе так ничего путного и не придумали?
Сейчас наиболее популярно делать так: работаем только по https, при аутентификации передаем в явном виде пароль пользователя и логин (привет, man-in-the-middle!), сервер вычисляет хэш пароля, сравнивает его с хэшем из БД согласно данному логину, и высылает токен аутентификации. Далее пользователь этот токен в куках или local storage сохраняет и при авторизации каждый раз высылает его серверу. Просрочил токен - проходи аутентификацию заново.
Основных недостатка здесь два: во-первых, хоть это и сложно, но возможно на прокси-https сделать man-in-the-middle; во-вторых, требуется SSL (т.е. генерь самоподписной сертификат или покупай «кошерный»).
Может быть, есть какой-нибудь нормальный человеческий способ аутентификации, надежный как для HTTPS, так и для незащищенного соединения?
Скажем, самый простой способ: при аутентификации у сервера запрашивается случайно сгенеренный ключ. Он используется как соль: к хэшу (я надеюсь, жабоскрипт умеет sha512?) пароля добавляется эта соль и вычисляется новый хэш. Данный хэш с логином пользователя отправляются серваку. Тот делает аналогичные вычисления и сравнивает с данными из БД. Т.е фактически аутентификация заключается в запросе ключа. Через какое-то время ключ «прокисает» и надо пройти заново процедуру. Авторизация заключается в регулярной отправке серверу пары логин-хэш. В данном случае можно вообще в local storage браузера хранить хэш пароля пользователя и вообще никогда больше не требовать ввода логина/пароля (покуда пользователь не нажмет logout, в результате чего хэш пароля из local storage будет удален).
Какие косяки могут быть в этом способе?