2012-02-02 3 views
11

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

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

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

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

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

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

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

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

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

ответ

4

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

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

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

+0

Спасибо за ответ, но я боюсь, что разоблачение домена appspot.com не вариант, это слишком уродливо. Я не возражаю против того, видят ли пользователи, что сайт защищен. Например, Reddit отправляет регистрационную информацию через HTTPS, но пользователь ее не видит. Я не думаю, что есть доказательства того, что принятие Reddit было ограничено отсутствием * видимого * использования HTTPS. – sanity

+0

О, я не уверен, что могу согласиться с тем, что вы * должны использовать HTTPS для безопасной связи через HTTP, так как вы всегда можете выполнять криптование вручную в JavaScript и на сервере. Конечно, вы все еще уязвимы для MITM с первоначальной загрузкой кода JavaScript, но меня больше беспокоит Ева, чем Мэллори. – sanity

+0

Если вы не хотите, чтобы они отображали https, и вам не нужно сохранять безопасные куки, тогда jsonp + https to appspot.com должен работать нормально. Возможно, вы могли бы реализовать свой собственный ssl с javascript, но вы упомянули, что хотите избежать повторного использования колеса. И ... зачем беспокоиться, если в любом случае он будет уязвим для MITM? Если кто-то заботится достаточно, чтобы подслушивать, кто-то в конечном итоге позаботится о том, чтобы создать MITM. –

0

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

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

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

С уважением.

+1

Спасибо, к счастью, у меня довольно приличное понимание криптографии (прикладная криптография - одна из моих любимых книг;), но, конечно же, вам не нужно изобретать велосипед, чтобы получить безопасную аутентификацию? – sanity

+0

:) Но я не нашел надежной реализации этого подхода. большую часть времени мы предпочитаем использовать https через http, когда нам нужна аутентификация. –

+0

Да, я склоняюсь к JSONP по HTTPS – sanity

Смежные вопросы