2010-06-23 2 views
5

Google Reader API Кажется, сегодня ожидается что-то другое для аутентификации!Проблема проверки подлинности Google Reader

Около недели назад я загрузил this, и все работает, и я пытаюсь передать это в java. Для моего кода он работает отлично (с помощью ваших примеров) до сегодняшнего дня. Я стекаю все трассировку, и я узнал, что вдруг читатель Google не принимает только SID в качестве файла cookie. И, конечно, я тестирую и запускаю ваше приложение-образец, и оно не работает.

Затем я пошел нарушать данные Google Reader, и я удаляю все записи cookie, кроме SID, и он не работает (хорошо он дает 401, точно так же как мое приложение и ваш образец); Я тестировал снова, и я обнаружил, что теперь нужна еще одна запись cookie под названием HSID, которая, сравнивая с SID (которая более чем на 100 слов), составляет около 10-20 слов. Кто-нибудь знает, где мы можем получить этот дополнительный HSID?

PS Я могу сделать HTTPS для аутентификации, и Google возвращает мне три токена (SID, LSID, AUTH). Но нигде я не могу догадаться, что такое HSID.

ответ

10

Я сделал это. Да, link, предоставляемый sfa правом. Но формат слишком запутан. Вот как я это делаю.

  1. Опубликовать в https://www.google.com/accounts/ClientLogin с помощью учетных данных.
  2. Взамен три токена будут переданы при правильном входе в систему: a. SID b. LSID c. Auth
  3. Сохраните Auth где-нибудь в приложении. Забудьте о SID и LSID (я предполагаю, что они могли бы удалить их позже)
  4. В каждом запросе, добавьте следующие в заголовке: HeaderName: Авторизация значение: GoogleLogin AUTH = {Auth строка} например (в java)

    Метод HttpGet = новый HttpGet (CommandUrl + QueryString); method.addHeader («Авторизация», «GoogleLogin auth =» + Auth);

Это работает. Спасибо sfa за ссылку.

+0

Я не получил 'Auth = ...' в ответе на вход, пока я не передал 'service: reader' в запрос на вход. –

3

Вы должны добавить авторизацию GoogleLogin auth = xxx в свой заголовок. Вот цитата из message:

Вот краткий обзор того, как сделать это изменение: Для тех приложений, которые область уже получивших аутентификации из https://www.google.com/accounts/ClientLogin вы должны вернуться как часть вашего ответа значение Auth =. За каждый запрос , который вы отправляете в Reader, вы должны указать это значение как HTTP-заголовок , и все будет работать как обычно. Формат заголовка: Авторизация: GoogleLogin AUTH = [значение получается из ClientLogin]

Conferm, что это работает! Я получил ту же ошибку и уже решил проблему. See it here.

+0

да. То, что я пытаюсь сделать, - это вмешательство читателя Google и просмотр того, какой параметр нужен, как то, что я написал в моем вопросе. И он не работает, если нет HSID. – xandy

0

при первом входе в систему https://www.google.com/accounts/ServiceLoginAuth . вы получите hsid!

Я вижу, что все google reader api используют hsid.

я использую поджигатель могут видеть hsid в поле SetCookie ответа

1

См http://code.google.com/p/google-reader-api/wiki/Authentication подробности, но ненадолго, только ClientLogin и OAuth поддерживаются. Пожалуйста, не продолжайте моделировать поток браузера (с файлами SID и HSID), которые не поддерживаются и могут прерываться в любой момент.

1

Или рассмотреть вопрос об использовании класса ReaderTemplate предлагаемый здесь: http://github.com/wspringer/greader-java/. Это в основном скрывает сложность ткачества в соответствующих заголовках и (повторной) аутентификации.