Проблемы API контактов Google из клиента JavaScript с аутентификацией OAuth2

До сих пор боролись с этим в течение многих часов, Документы кажутся ужасными. В основном я пытаюсь получить доступ для чтения к контактам пользователей, прошедших проверку подлинности OAuth2, с помощью Portable API контактов или полноценный API контактов . Google недавно начал разрешение OAuth2 .

Я могу получить доступ к контактам пользователей через API контактов, сначала попросив пользователя пройти аутентификацию в области действия: "https://www.google.com/m8/feeds". Затем я могу получить их первые 25 контактов с помощью jQuery (показанный код CoffeeScript )

$.ajax
  url: "https://www.google.com/m8/feeds/contacts/default/full"
  dataType: 'jsonp'
  data: { access_token: token, alt: 'json-in-script' }
  success: (data, status) ->
    console.log "The returned data", data

Это работает, и я получаю данные JSON. Однако, почти невероятно, единственный порядок контактов, который обеспечивает Google (насколько я могу судить), это lastmodified '(серьезно?) Мне нужно что-то более похожее на «лучших друзей» или «самых популярных».

Это может быть то, что может сделать API переносимых контактов Google , (ууу!). Конечно, я не могу получить успешный запрос на работу.

Сначала я заставляю пользователя проходить аутентификацию с помощью API переносимых контактов, щелкая эту ссылку (обратите внимание на область действия: "https://www-opensocial.googleusercontent.com/api/people")

<a href="https://accounts.google.com/o/oauth2/authclient_id=457681297736.apps.googleusercontent.com&response_type=token&redirect_uri=http://localhost:3000/team&scope=https://www-opensocial.googleusercontent.com/api/people">Import Google Contacts</a>

Это отлично работает, и я получаю маркер доступа обратно.

Далее я пытаюсь отправить запрос ajax в API переносимых контактов

$.ajax
  url: "https://www-opensocial.googleusercontent.com/api/people/@me/@all"
  dataType: 'jsonp'
  data: { access_token: token, alt: 'json-in-script' }
  success: (data, status) ->
    console.log "The returned data", data

Но это возвращает ошибку 403

403 (The currently logged in user and/or the gadget requesting data, does not have access to people data.

Есть идеи, что я делаю не так?

Приложение
Я нашел этот отчет об ошибках на форуме Google OAuth2, который советовал нам установить заголовок авторизации при работе с API Portable Contacts. Поэтому я попробовал это так:

$.ajax
  url: "https://www-opensocial.googleusercontent.com/api/people/@me/@all"
  dataType: 'jsonp'
  data: { access_token: token, alt: 'json-in-script' }
  beforeSend: (xhr) ->
    xhr.setRequestHeader "Authorization", "OAuth #{token}"
  data: { access_token: token }
  success: (data, status) ->
    console.log "The returned data", data

Но я получаю ту же ошибку 403:

403 (The currently logged in user and/or the gadget requesting data, does not have access to people data
7 голосов | спросил David Tuite 13 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowTue, 13 Sep 2011 14:45:13 +0400 2011, 14:45:13

1 ответ


0

Проблема в том, что вы, очевидно, не можете установить заголовок запроса на запрос JSONP. См. Ответ на этот вопрос для получения дополнительной информации.

Насколько я вижу, альтернативы:

  1. Используйте библиотеку JS API Контактов Google . Это только использует AuthSub, который сами по себе считают Google плохо. Я бы предпочел не делать этого. Любой другой сервис, с которым я взаимодействую, использует OAuth2.
  2. Используйте новые стандарты Ajax и XDomainRequest уровня 2, упомянутые в вопросе SO, с которым я связан. Однако они придут со своими проблемами. Это звучит как беспорядок в целом. Это не будет работать в старых браузерах, и мне придется делать кучу функций обнаружения и т.д. Я даже не знаю, будет ли API поддерживать эти функции.
  3. Сделайте все это на сервере. Это тоже не совсем идеально. Менее, чем идеальный пользовательский опыт.

Это не должно быть так сложно, Google.

ответил David Tuite 15 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowThu, 15 Sep 2011 20:58:40 +0400 2011, 20:58:40

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132