Подтвердить что ты не робот

Как вы обновляете токен доступа с истекшим сроком доступа Facebook?

Я работаю из этой ссылки и пытается реализовать протокол OAuth, чтобы пользователи могли входить на мой сайт через Facebook. Тем не менее, документация в Facebook довольно ужасная, и она неясна в нескольких ключевых частях.

В нем говорится, что авторизация выполняется в три этапа:

  • Аутентификация пользователя (перенаправляет пользователя на https://facebook.com/dialog/oauth?client_id=...&redirect_uri=... и ожидает, что страница redirect_uri будет возвращена с помощью code). Отлично работает!

  • Авторизация приложения (обрабатывается Facebook и т.д.). Отлично работает!

  • Проверка подлинности приложения (На странице обратного вызова возьмите code, который вы получите, и вызовите https://graph.facebook.com/oauth/access_token?client_id=...&redirect_uri=...&client_secret=...&code=.... Тело ответа будет включать access_token нам нужно сделать что-то)

Я понимаю, что с access_token я могу назвать API и т.д. Но что происходит, когда оно истекает? Я мог бы получить новый, но к этому моменту будет много HTTP-запросов позже, и у меня больше нет code, который я использовал для его получения. Должен ли я хранить code вдоль стороны access_token? Или я должен сказать пользователю снова войти в систему, чтобы получить новый code, чтобы получить новый access_token?

Или, не хватает ли здесь ключевой части? Мне не нужен токен offline_access, так как я буду обрабатывать данные только в ответ на действия пользователя.

4b9b3361

Ответ 1

Когда истечет access_token, пользователь будет замечен как "выйденный из системы" через Facebook. Ваше приложение будет проходить через тот же процесс, что и в первый раз, но пользователь может этого не делать.

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

Если пользователь не отменил доступ к вашему приложению, но не зарегистрирован в Facebook, им будет представлен вход в систему Facebook на этапе авторизации приложений. Им не будет предложено снова предоставить разрешение на использование вашего приложения, так как Facebook знает, что ваш идентификатор приложения разрешен этим пользователем.

Наконец, если пользователь отменил доступ, тогда им будет представлен первоначальный запрос на авторизацию приложений, и вы будете следовать исходному потоку.

По существу, вы должны учитывать access_token как volatile, а не хранить его, но используя access_token, который вы получаете как часть процесса входа в систему, который происходит за кулисами все время, и только с участием пользователь, когда он выходит из Facebook или отменяет доступ к вашему приложению.

Это отличается от Twitter OAuth, с помощью которого вы можете хранить и повторно использовать его.

Ответ 2

Из документации Facebook, связанной с вашим вопросом:

Как только токен истечет, вам нужно будет повторно выполнить указанные выше шаги генерировать новый код и access_token, хотя, если пользователь уже авторизованного приложения, им не будет предложено сделать это снова.

Когда истечет access_token, вам нужно будет получить новый, пройдя те же действия. Пользователь должен будет снова войти в систему, и вам нужно будет получить новый code и, в свою очередь, новый access_token.