Как правильно обновить маркер доступа Facebook OAuth2 после его истечения? - PullRequest
53 голосов
/ 07 января 2011

Насколько я понимаю, это основной процесс для новых приложений Facebook iframe canvas, использующих в двух словах API-интерфейс OAuth2:

  1. Перенаправление на URL авторизации приложения (или ссылку на него).
  2. Пользователь авторизуется и перенаправляется на ваш URL обратного вызова
  3. Обратный вызов использует параметр «код» для получения токена доступа
  4. Токен доступа используется с Graph API для извлечения или передачи информации

Проблема в том, что срок действия маркеров доступа истекает относительно быстро, и их необходимо «обновить», поэтому у меня следующие вопросы: 1) как определить, что токен истек, если не пытаться его использовать и просто получать ошибку? и 2) как лучше всего получить новый токен?

В настоящее время я просто обнаружил, что произошла ошибка при попытке получить информацию о пользователе с помощью его токена доступа, а затем снова перенаправить на URL-адрес авторизации - поскольку они уже авторизовали приложение, на экране появляется пустая страница, и они перенаправляются обратно на обратный вызов моего приложения, где я получаю свежий токен. Это так неуклюже, я не могу поверить, что это правильный метод.

Ответы [ 6 ]

41 голосов
/ 07 января 2011
  1. Единственный способ определить, является ли файл cookie действительным, - это использовать его и перехватить ошибку, если срок ее действия истек.Не существует метода опроса или чего-либо, что проверяло бы токен.

  2. Чтобы получить новый токен, просто снова перенаправьте пользователя на страницу аутентификации.Поскольку они уже авторизовали ваше приложение, они сразу же будут перенаправлены обратно в ваше приложение, и у вас будет новый токен.Им не будет предложено разрешить, поскольку они уже сделали это.

Короче говоря, уловок в этом нет.Вы уже делаете это правильно.

26 голосов
/ 13 апреля 2012

Недавно Facebook внес некоторые изменения в токены доступа, что позволяет периодически обновлять их.

https://graph.facebook.com/oauth/access_token?
client_id=APP_ID&
client_secret=APP_SECRET&
grant_type=fb_exchange_token&
fb_exchange_token=EXISTING_ACCESS_TOKEN 

Для получения более подробной информации, проверьте здесь: https://developers.facebook.com/docs/roadmap/completed-changes/offline-access-removal

4 голосов
/ 19 июня 2014

Facebook удалил функцию обновления токена доступа в режиме «от имени». Самый лучший и простой способ - перенаправить пользователя на страницу входа в Facebook, чтобы заново открыть приложение. Найти документацию к справочнику здесь

4 голосов
/ 31 июля 2013
//you just need more step because the access token you are getting will expire in 1 hour
    //you can overcome this in step 5

    1-Redirect to (or have user click link to) app's authorization URL
2-User authorizes and is redirected to your callback URL
3-Callback uses "code" parameter to get a access token
4-Access token is used with Graph API to pull or push information
    5-exchange short-lived access token you just got with 60 day access token
    https://graph.facebook.com/oauth/access_token?client_id=APP_ID&client_secret=APP_SECRET&grant_type=fb_exchange_token&fb_exchange_token=EXISTING_ACCESS_TOKEN
    6-after 60 day the user must login again to your app and the steps from 1-5 will be repeated.
    --the real problem you will face is how to make the user visit your app page again
2 голосов
/ 04 февраля 2013

, если пользователь уже авторизовал ваше приложение и срок действия токена истек.Вы можете снова перенаправить пользователя на страницу аутентификации.но диалог oauth не отображается, потому что пользователь уже авторизовал ваше приложение.он перенаправит на параметр redirect_url, который вы использовали.

0 голосов
/ 09 апреля 2017

{ "ошибка": { "message": "Отсутствует параметр redirect_uri.", "type": "OAuthException", "code": 191, "fbtrace_id": "BHvng7s53ra"}}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...