четверг, 11 ноября 2010 г.

Авторизация на ya.ru (через passport.yandex.ru)

Попросили меня (за практически спасибо) написать модуль для авторизации и постинга постов на ярушку (ya.ru).

Быстренько накидал через свои компоненты, а что сложного-то? GET my.ya.ru далее получаем форму для авторизации через passport.yandex.ru заполняем поля и далее через n редиректов в идеале попадаем на my.ya.ru уже авторизованными.

В чем сложность №1. Понятно что авторизация не совсем обычная (не через тривиальные куки) - и понятно что яндекс(домен) свои куки не отдает даже домену ya.ru.

Первый и быстро написаный код не работал - вернее он явно авторизовал на passport.yandex.ru (видно было по выдаче), но на my.ya.ru был редирект без кук и сессий.

Ломал над этим голову долго, причем этот код замечательно работал для mail.yandex.ru и webmaster.yandex.ru - на это и понятно - это один и тот-же домен.

Перебрал все, установил сниффер - вижу что при первичной загрузке my.ya.ru в браузере срабатывает редирерт, на my.ya.ru/pass где получают куки и возвращают опять же редиректом на my.ya.ru.
С точки зрения пользователя ничего не происходит он вбивает my.ya.ru и видит страницу авторизации.

Но в моем случае этого не было! Было просто загрузка формы логина, без редиректа и без принятия кук.

Оказалось что я не передавал в хедере HTTP тэг accept = html/text и прочее.
И именно из-за этого my.ya.ru не делал редирект и не подсовывал кук.
Как только начал указывать - все получилось.

В кратце:
GET my.ya.ru -> my.ya.ru/pass -> my.ya.ru
Заполняем форму
POST passport.ya.ru -> ... -> pass.yandex.ru -> my.ya.ru -> pass.yandex.ru -> my.ya.ru
Мы авторизованы! (В предпоследнем ya.ru передается сессия, а в последнем уже авторизованные куки для ya.ru)

5 комментариев:

  1. Так а где сама программа? :)

    ОтветитьУдалить
  2. Сама программка досталась автору и заказчику :)
    А вообще если есть интерес, то во сколько бы оценеили программку, которая может
    а) заполнять блоги на ya.ru и LJ заданными постами (с тэгами)
    б) в LJ френдить кучу народу (с поиском по интересам)
    в) возможностью автоматического комментирования своих блогов, своими другими аккаунтами
    г) с прокси само-собой (но только HTTP)
    ... и многое другое
    ?

    ОтветитьУдалить
  3. Сложно сказать :) Не занимался оцениванием.
    Стараюсь всегда пользоваться бесплатными программами :)

    ОтветитьУдалить
  4. А я как бы из другого лагеря :) программист. Получаю деньги за создание платных программ :)

    ОтветитьУдалить
  5. Да, я понял :)
    Спасибо!

    ОтветитьУдалить