Каков самый простой безопасный способ аутентификации пользователей через AJAX?

Я создаю веб-приложение Google App Engine с задней частью Java, которая в значительной степени зависит от JavaScript/JQuery в браузере (вы можете видеть его здесь).

Я хочу реализовать механизм аутентификации пользователя, который также будет полагаться на AJAX (т.е. они смогут зарегистрироваться и войти без обновления страницы).

Я не хочу полагаться на аутентификацию Google, потому что я обнаружил, что многие люди неохотно отказываются от своих адресов электронной почты GMail, но я хотел бы поддерживать аутентификацию через Google/Facebook/Twitter и т.д. в будущем.

Мне нравится простота подхода Reddit к аутентификации пользователей.

Меня беспокоит то, что, поскольку люди не будут использовать мое приложение через HTTPS, я не хочу отправлять пароль в текстовом виде через HTTP. Я также предпочел бы полагаться на какой-то секретный токен (возможно, хеш пароля и некоторую предоставленную сервером "соль" ), которая может быть перехвачена и подделана.

В то же время я не хочу прикладывать огромные усилия для внедрения механизма аутентификации.

Есть ли подход, который дает мне простоту, которую я хочу, но которая безопасна через HTTP?

edit: Я только понял, что Google App Engine поддерживает HTTPS, но только если вы подключаетесь через URL *.appspot.com для своего сайта. К сожалению, вы не можете делать AJAX-вызовы из-за ограничений межсайтового скриптинга, хотя я думаю, что это возможно с помощью JSONP.

Итак, использует JSONP + HTTPS + *. appspot.com лучший подход здесь?

Ответ 1

Вы должны использовать https для безопасной связи через http. Невозможно сделать безопасную связь из браузера без него.

Если вы используете JSONP + https в домене appspot, ваши пользователи не будут видеть, что ваш сайт защищен, и вы не сможете безопасно сохранять файлы cookie. Для нас единственным решением было разоблачить безобразный домен appspot.com непосредственно нашим клиентам. Google уже давно говорит о том, что SSL на пользовательских доменах идет, но нет даты.

Изменить для PS: если вам не нужны ваши клиенты, чтобы увидеть зеленый https, и вам не нужно сохранять файлы cookie в безопасном режиме (может быть, это секретный ключ безопасности?), jsonp + https to *.appspot.com звучит как умное решение, которое будет работать.

Ответ 2

Это действительно хороший вопрос и действительно нуждается в глубоком знании криптографии. Это статья, которую я нашел интересной пару месяцев назад. У них есть предлагаемое решение с использованием CRAM-MD5 аутентификации с запросом-ответом. Надеюсь, это может быть полезно.

http://en.wikipedia.org/wiki/CRAM-MD5

http://blog.stochastictechnologies.com/secure-authentication-over-http

С уважением.