[решено] Кросс-доменная аутентификация вконтакта

0. Открываем «чистый» браузер или вычищаем все куки/етц — приватные данные
1. Заходим на vk.com и залогиниваемся
2. Открываем vkontakte.ru

И наблюдаем себя залогиненного.
Вопрос: Как они это сделали? (т.е. как vkontakte.ru понимает, что я тот же человек, что и на vk.com?)

  • Смотрел Firebug'ом и через Wireshark — Запросов с одного домена на другой не обнаружил.
  • Поиски в сурцах мне ничего до сих пор не дали.
  • Кука сессии ".vkontakte.ru" появляется после запроса к /login.php?...&hash=[многоцифр], поиски в js места формирования hash успехом пока не увенчались


Есть идеи?
  • Вопрос задан
  • 4824 просмотра
Решения вопроса 1
ertaquo
@ertaquo
На самом деле при входе на ВКонтакте POST-запрос идет на https://login.vk.com/. Оно чего-то сохраняет в куки и делает редирект на http://vkontakte.ru/login.php с каким-то хешем в GET-параметрах. Вот так оно и работает.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@egorinsk
Вы вычистили не все приватные данные.

p.s. После удаления кук на vkontakte.ru/vk.com должно разлогинивать. Вы что-то делаете не так.
Ответ написан
Комментировать
@1nd1go
Там на самом деле не POST, а GET

Шаги такие:
1. vkontakte.ru/feed, редиректит на login.vk.com/ с параметрами откуда, hash ip (интересно, это на случай отключенного referrer'а) и страницей куда, я так подозреваю
2. Login.vk.com редиректит на ту страницу, куда вы шли, т.е. на vkontakte.ru/feed
3. А оттуда уже куки сессии ставится, что вы залогинены.

Т.е. получается что все куки по сессии ставятся только на самом vkontakte.ru, что логично, для организации сессии. Это значит, что SSO перебрасывая идентифиакторы сессии между login.vk.com и сайтами, которые его используют по внутренним соеднениями между серверами, а GETами с редиректами мы просто забираем куки сессий
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы