Соц сети обычно предлагают авторизоваться через них двумя способами:
1) Серверный. Пользователь переходит на соц сеть, оттуда его перекидывает к нам на сайт с неким ключом, дальше мы этот ключ + наш секретный ключ используем, чтоб получить токен.
2) Клиентский. Пользователь переходит на соц сеть, оттуда его перекидывает к нам на сайт с токеном в хэшэ.
Ко второму варианту обычно идет сноска о том, что он небезопасен.
При этом всегда обязательно использование SSL.
В чем опасность второго подхода? Кто и как может перехватить такой токен?
И еще интересно, почему он передается именно в хэшэ? Почему не гет параметром, например?
Любой прокси на пути от вас до сайта видит ваш запрос. Администратор этого прокси может запросто выдернуть ваш хеш, аннулировать ваш запрос и повторить от своего имени. Тогда он авторизуется под вашей учётной записью.
И еще интересно, почему он передается именно в хэшэ? Почему не гет параметром, например?
Lander, ну так это в требованиях, без этого не получится использовать oAuth (по крайней мере я такой соц сети не встречал). Получается, что вся опасность - это что кто-то на стороне клиента "подсмотрит" строку адреса или вытащит токен из истории? В голову мне лично больше ничего не приходит.
WebDev, Ну в общем и целом - да. Смысл в том, что кто то, где то может подсмотреть ваш хэш (возможно даже из-за плеча в строке браузера :)). И, если я правильно помню, если одна из сторон не поддерживает SSL (например срок действия сертификата закончился), то запрос будет передаваться в открытом виде (Хотя хром предупреждает об этом, но кто из пользователей вчитывается в предупреждения, а не просто нажимает "Продолжить"?). Грубо говоря, в случае клиентской авторизации нужно меньше допущений чтобы скомпроментировать пользователя.
Второй вариант достаточно безопасен при правильной реализации, однако там есть много подводных камней. Достаточно подробно они и возможные атаки на клиентский OAuth разобраны в этой статье.
Хэш используется для предотвращения утечек токена наружу, например через Referer страницы.