Срок действия токенов доступа Facebook Oauth 2.0 истекает?

124

Я играю с авторизацией Oauth 2.0 в Facebook и задавался вопросом, истечет ли когда-нибудь срок действия токенов доступа, которые Facebook теряет. Если да, есть ли способ запросить токен доступа с длительным сроком службы?

Джаред Браун
источник
4
Чтобы добавить некоторые детали к этому вопросу: даже offline_access становится недействительным, когда пользователь меняет свой пароль Facebook. Так что лучше перестраховаться и повторно получить новый токен доступа, если вы получаете ошибки при использовании старого.
Hoàng Long
2
Чтобы добавить ссылку: developers.facebook.com/blog/post/500
Hoàng Long
2
Эй, ребята, вы все просто зажигаете. Каким бы ни был вопрос, я просто решил его ... Спасибо всем
vinay
3
Похоже, что 1 мая Facebook прекращает поддержку разрешения offline_access. В будущем срок действия всех токенов доступа истечет, когда истечет "срок действия" (60 дней), пользователь изменит свой пароль, пользователь деавторизует ваше приложение или выйдет из системы. API . PS Я не уверен, почему Facebook устанавливает новое «время истечения срока» на 60 дней, если токены доступа все еще истекают при выходе из системы (похоже, что пользователи обычно выходят из системы в течение 60 дней). Может, я что-то упускаю
Стивен Векслер,
1
Поведение access_token сейчас меняется, вам следует найти «Критические изменения» за июль 2012 года - разрешение offline_access устарело, а access_token будет иметь длительный жизненный цикл.
qodeninja

Ответы:

64

Немного покопавшись, я нашел это. Вроде бы ответ:

Обновлено (11 апреля 2018 г.)

  • Срок действия токена истечет примерно через 60 дней.
  • Токен будет обновляться один раз в день в течение 90 дней, когда человек, использующий ваше приложение, отправляет запрос на серверы Facebook.
  • Все токены доступа необходимо обновлять каждые 90 дней с согласия человека, использующего ваше приложение.

Объявление об изменении Facebook (10.04.2018)

Facebook обновил страницу истечения срока действия токенов (10.04.2018)

offline_access: позволяет вашему приложению выполнять авторизованные запросы от имени пользователя в любое время. По умолчанию срок действия большинства токенов доступа истекает через короткий период времени, чтобы гарантировать, что приложения будут делать запросы только от имени пользователя, когда они активно используют приложение. Это разрешение делает токен доступа, возвращаемый нашей конечной точкой OAuth, долгоживущим.

Это запрошенное значение разрешения.

http://developers.facebook.com/docs/authentication/permissions

ОБНОВИТЬ

Разрешение offline_access было удалено некоторое время назад.

https://developers.facebook.com/docs/roadmap/completed-changes/offline-access-removal/

Tendrid
источник
2
В ответ на это я создал библиотеку с открытым исходным кодом, которая может быть вам полезна, ребята. Это библиотека oAuth, которая предназначена для поддержки всех социальных сетей с реализациями oAuth. Он уже поддерживает расширенные разрешения, включая размещение сообщений в автономном режиме. code.google.com/p/socialoauth
Тендрид,
Даже токены offline_access истекают, если пользователь меняет свой пароль на Facebook.
Bemmu 05
К сожалению, это не «чистое» решение проблемы. Сначала или все запросы на это разрешение предупреждают пользователя о дополнительном разрешении (например, это приложение сможет получить доступ к вашей учетной записи facebook в ЛЮБОЕ время), что отключает МНОГО потенциальных клиентов. Во-вторых, если пользователь изменит свой пароль, этот токен станет недействительным. Поэтому должен быть лучший способ (например, обновить токен) для получения нового access_token, особенно для веб-приложений, управляемых ajax с богатым клиентом.
Владимир
24
Согласно их документации api, offline_access больше не будет поддерживаться со 2 мая 2012 г.
Бен Леш,
@Tendrid Ваша библиотека поддерживает только Facebook и Twitter.
mareoraft
30

Попробуйте, может быть, это поможет вам

https://graph.facebook.com/oauth/authorize?
    client_id=127605460617602&
scope=offline_access,read_stream,user_photos,user_videos,publish_stream&
    redirect_uri=http://www.example.com/

Чтобы получить пожизненный токен доступа, вы должны использовать scope=offline_access

Значение таково scope=offline_access: -

Позволяет вашему приложению выполнять авторизованные запросы от имени пользователя в любое время. По умолчанию срок действия большинства токенов доступа истекает через короткий период времени, чтобы гарантировать, что приложения будут делать запросы только от имени пользователя, когда они активно используют приложение. Это разрешение делает токен доступа, возвращаемый нашей конечной точкой OAuth, долгоживущим.

Но согласно будущему обновлению facebook, функциональность offline_acees будет прекращена навсегда с 3 октября 2012 года. И пользователю будет предоставлен 60-дневный долгоживущий токен доступа, и до истечения срока действия токена доступа Facebook уведомит, или вы можете получить свой собственный функция уведомления, извлекающая значение срока действия из API Facebook ..

PrateekSaluja
источник
10
Я хотел бы сообщить вам, что fb изменился в его api, и теперь нет доступного токена времени жизни, теперь автономный доступ будет активен в течение 60 дней.
PrateekSaluja
21

Обратите внимание, что Facebook теперь отказывается от разрешения offline_access в пользу токенов, для которых вы можете запросить «обновление» до истечения срока действия. Я только сейчас занимаюсь этим сам, поэтому мне нечего больше сказать, но этот документ может помочь:

https://developers.facebook.com/docs/offline-access-deprecation/

Трипп Лилли
источник
17

Я пришел сюда с тем же вопросом, что и OP, но ответы, предлагающие использовать offline_access, вызывают у меня красные флажки.

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

Я бы не стал использовать эту функцию для работы с коротким временем жизни токена; это не по прямому назначению. Действительно, время жизни токена само по себе является функцией безопасности. Я все еще ищу подробную информацию о правильном использовании этих токенов (Могу ли я сохранить их? Как / я должен их защитить? Включает ли Facebook «токен обновления» OAuth 2.0 в основной? Если нет, то где он и / или как мне обновить?), но я уверен, что offline_access неправильный путь.

Дэвид Поуп
источник
1
такие же сомнения здесь, Дэвид. вы нашли дополнительную информацию о том, как защитить токены, хранящиеся для автономного доступа?
Нил Эйз
Документы Facebook ужасны, но я думаю, что ситуация такова, что сохранять токены доступа, НЕ полученные с помощью offline_access, достаточно безопасно. Хотя верно, что любой, кто получает к нему доступ (пока пользователь FB все еще вошел в систему), может делать все, на что пользователь предоставил вам разрешение, это не так уж плохо, поскольку токены становятся недействительными, как только пользователь выходит из Facebook. везде. Это все еще дыра в безопасности (мне кажется странным, что вам не нужно указывать секрет своего приложения в запросах / me), но она не является открытой. Если кто-то это понимает, лучше не стесняйтесь поправлять меня.
Дэвид Поуп
8

Да, срок их действия истекает. Существует значение expires, которое передается вместе с access_token, и, насколько я могу судить, это около 2 часов. Я искал, но не вижу способа запросить более длительный срок действия.

TerryMatula
источник
3
Если вы запросите разрешение offline_access, срок действия токена не истечет.
Брендан Берг,
1
@Brendan: Но он станет недействительным, как только пользователь изменит свой пароль на Facebook
Хоанг Лонг,
@ HoàngLong есть упоминание об этом?
Чарльз Пракаш Дасари
4

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

Цитируется из facebook http://developers.facebook.com/docs/authentication/

Примечание. Если приложение не запрашивало разрешение offline_access, токен доступа ограничен по времени. Маркер доступа с ограниченным временем доступа также становится недействительным, когда пользователь выходит из Facebook. Если приложение получило от пользователя разрешение offline_access, токен доступа не имеет срока действия. Однако он становится недействительным, когда пользователь меняет свой пароль.

Предположим, вы храните идентификатор пользователя facebook uid и токен доступа в таблице пользователей в своей базе данных, каждый раз, когда пользователь нажимает кнопку «Войти через facebook», вы проверяете статус входа, используя facebook Javascript API, а затем проверяете статус подключения из ответа. , если пользователь подключился к вашему сайту, вы можете обновить токен доступа в таблице.

imikay
источник
3

Нажмите здесь, чтобы обменять короткоживущий токен доступа на долгоживущий / не истекающий (страницы):

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 
MPaulo
источник
1

войдите в учетную запись facebook и отредактируйте настройки своего приложения (учетная запись -> настройки приложения -> дополнительное разрешение приложения, которое использует вашу учетную запись). снимите флажок с разрешения (Доступ к моим данным, когда я не использую приложение (offline_access)). Тогда при входе в приложение face book выдаст новый токен.

Sreekanth P
источник
1

Базовый токен facebook истекает примерно через час. Но вы можете использовать токен обмена, чтобы получить токен-долгожитель https://developers.facebook.com/docs/facebook-login/access-tokens

GET /oauth/access_token?  
    grant_type=fb_exchange_token&           
    client_id={app-id}&
    client_secret={app-secret}&
    fb_exchange_token={short-lived-token} 
Г-н Тунг
источник
0

проверьте следующее, когда вы взаимодействуете с API графика facebook.

1) URL подключения приложения должен быть основой вашего URL подключения "redirect_uri": - www.x-minds.org/fb/connect/ redirect_uri - www.x-minds.org/fb/connect/redirect 2) Ваш "redirect_uri" "должен быть одинаковым в обоих случаях (когда вы запрашиваете код подтверждения и запрашиваете access_token) redirect_uri - www.x-minds.org/fb/connect/redirect 3) вы должны кодировать аргумент, когда вы запрашиваете access_token 4) не должен передавать аргумент (type = client_cred), когда вы запрашиваете access_token. сервер авторизации выдаст токен без части сеанса. мы не можем использовать этот токен с псевдонимом «я» в графическом API. Этот токен будет иметь длину (40), но токен с сеансовой частью будет иметь длину (81). Токен доступа без части сеанса будет работать в некоторых случаях

например: - https://graph.facebook.com/ ? access_token = 116122545078207 | EyWJJYqrdgQgV1bfueck320z7MM. Но Graph API с псевдонимом «я» будет работать только с токеном с сессионной частью.

Sreekanth P
источник
0

Я не знаю, когда точно истекает срок действия токенов, но они есть, иначе не было бы возможности предоставить автономные разрешения.

В любом случае, иногда требовать от пользователя предоставления автономных разрешений - это излишне. В зависимости от ваших потребностей, может быть, достаточно, чтобы токен оставался действительным, пока веб-сайт открыт в браузере пользователя. Для этого может быть более простое решение - периодически перезагружать пользователя с помощью iframe: автоматический повторный вход в facebook из cookie php

Работал у меня ...

Uri
источник
0

Несколько лет спустя это справедливо, но теперь в Facebook Graph API Explorer рядом с токеном доступа есть небольшой информационный символ, который позволяет вам получить доступ к приложению инструмента токена доступа и продлить токен API на пару месяцев. Может быть полезно во время разработки.

введите описание изображения здесь

martinedwards
источник