Les jetons d'accès Facebook Oauth 2.0 expirent-ils?

124

Je joue avec l'autorisation Oauth 2.0 dans Facebook et je me demandais si les jetons d'accès Facebook expiraient. Si tel est le cas, existe-t-il un moyen de demander un jeton d'accès de longue durée?

Jared Brown
la source
4
Pour ajouter quelques détails à cette question: même l'accès offline_access est invalidé lorsque l'utilisateur change son mot de passe Facebook. Il est donc préférable de jouer en toute sécurité et d'obtenir à nouveau un nouveau jeton d'accès si vous recevez des erreurs lors de l'utilisation de l'ancien.
Hoàng Long
2
Pour ajouter la référence: développeurs.facebook.com
blog
2
yo les gars, vous êtes tout simplement rock. Quelle que soit la question, je viens de la résoudre ... Merci à tous
vinay
3
Il semble que Facebook désapprouve l'autorisation offline_access le 1er mai. À l'avenir, tous les jetons d'accès expireront lorsque le «délai d'expiration» (60 jours) sera écoulé, que l'utilisateur change son mot de passe, qu'il désautorise votre application ou que l'utilisateur se déconnecte. API . PS Je ne sais pas pourquoi Facebook fixe le nouveau "délai d'expiration" à 60 jours si les jetons d'accès expireront toujours lors de la déconnexion (il semble que les utilisateurs ont tendance à bien se déconnecter dans les 60 jours). Peut-être que je manque quelque chose ... expiration
Steven Wexler
1
Le comportement de access_token est en train de changer, vous devriez rechercher les "Breaking Changes" de juillet 2012 - l'autorisation offline_access est obsolète et le access_token aura un long cycle de vie.
qodeninja

Réponses:

64

Après avoir fouillé un peu, j'ai trouvé ça. Cela semble être la réponse:

Mis à jour (11 / avril / 2018)

  • Le jeton expirera après environ 60 jours.
  • Le jeton sera actualisé une fois par jour, pendant jusqu'à 90 jours, lorsque la personne utilisant votre application fait une demande aux serveurs de Facebook.
  • Tous les jetons d'accès doivent être renouvelés tous les 90 jours avec le consentement de la personne utilisant votre application.

Annonce de changement Facebook (10/04/2018)

Page d'expiration des jetons Facebook mise à jour (10/04/2018)

offline_access: permet à votre application d'effectuer des requêtes autorisées au nom de l'utilisateur à tout moment. Par défaut, la plupart des jetons d'accès expirent après une courte période de temps pour garantir que les applications ne font des demandes au nom de l'utilisateur que lorsqu'elles utilisent activement l'application. Cette autorisation rend le jeton d'accès renvoyé par notre point de terminaison OAuth de longue durée.

C'est une valeur d'autorisation demandée.

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

METTRE À JOUR

L'autorisation offline_access a été supprimée il y a quelque temps.

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

Tendrid
la source
2
En réponse à cela, j'ai lancé une bibliothèque open source qui pourrait vous être utile. C'est une bibliothèque oAuth qui vise à prendre en charge tous les réseaux sociaux avec des implémentations oAuth. Il prend déjà en charge les autorisations étendues, y compris la publication hors ligne. code.google.com/p/socialoauth
Tendrid
Même les jetons offline_access expirent si l'utilisateur modifie son mot de passe sur Facebook.
Bemmu
Malheureusement, ce n'est pas une solution «propre» au problème actuel. Tout d'abord ou tous demander cette autorisation avertit l'utilisateur de l'autorisation supplémentaire (par exemple, cette application pourra accéder à votre compte Facebook à TOUT moment), ce qui désactive BEAUCOUP de clients potentiels. Deuxièmement, si l'utilisateur change son mot de passe, ce jeton ne sera pas valide. Il doit donc y avoir un meilleur moyen (par exemple, un jeton d'actualisation) pour obtenir un nouveau access_token, en particulier pour les applications Web basées sur ajax pour clients riches.
Vladimir
24
Selon leur documentation API, offline_access ne sera plus pris en charge à partir du 2 mai 2012.
Ben Lesh
@Tendrid Votre bibliothèque ne prend en charge que Facebook et Twitter.
mareoraft
30

Essayez ceci, peut-être que cela vous aidera pleinement

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/

Pour obtenir un jeton d'accès à vie, vous devez utiliser scope=offline_access

Signification de scope=offline_accessest que: -

Permet à votre application d'exécuter à tout moment des requêtes autorisées au nom de l'utilisateur. Par défaut, la plupart des jetons d'accès expirent après une courte période de temps pour garantir que les applications ne font des demandes au nom de l'utilisateur que lorsqu'elles utilisent activement l'application. Cette autorisation rend le jeton d'accès renvoyé par notre point de terminaison OAuth de longue durée.

Mais selon la future mise à jour de Facebook, la fonctionnalité offline_acees sera obsolète pour toujours à partir du 3 octobre 2012. et l'utilisateur recevra un jeton d'accès de 60 jours et avant l'expiration du jeton d'accès, Facebook en informera ou vous pourrez obtenir votre personnalisé fonctionnalité de notification récupérant la valeur d'expiration de l'API Facebook.

PrateekSaluja
la source
10
Je tiens à vous informer que fb a changé dans son api et qu'aucun jeton de durée de vie n'est disponible, l'accès hors ligne sera maintenant actif pendant 60 jours.
PrateekSaluja
21

Notez que Facebook désapprouve désormais l'autorisation offline_access au profit des jetons pour lesquels vous pouvez demander une "mise à niveau" à l'expiration. Je viens de m'occuper de cela moi-même, donc je n'ai pas grand-chose à dire, mais ce document peut vous aider:

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

Tripp Lilley
la source
17

Je suis venu ici avec la même question que l'OP, mais les réponses suggérant l'utilisation de offline_access soulèvent des drapeaux rouges pour moi.

Sur le plan de la sécurité, accéder hors ligne au compte Facebook d'un utilisateur est qualitativement différent et bien plus puissant que la simple utilisation de Facebook pour l'authentification unique, et ne doit pas être utilisé à la légère (sauf si vous en avez vraiment besoin). Lorsqu'un utilisateur accorde cette autorisation, «l'application» peut examiner le compte de l'utilisateur de n'importe où et à tout moment. J'ai mis "l'application" entre guillemets car c'est en fait n'importe quel outil qui a les informations d'identification - vous pouvez créer un script pour toute une suite d'outils qui n'ont rien à voir avec le serveur Web qui peut accéder aux informations que l'utilisateur a accepté de partager avec ceux-ci identifiants.

Je n'utiliserais pas cette fonctionnalité pour travailler autour d'une courte durée de vie de jeton; ce n'est pas son objectif. En effet, la durée de vie des jetons est elle-même une fonctionnalité de sécurité. Je suis toujours à la recherche de détails sur l'utilisation correcte de ces jetons (Puis-je les conserver? Comment les sécuriser / dois-je les sécuriser? Est-ce que Facebook intègre le «jeton d'actualisation» OAuth 2.0 dans le jeton principal? Sinon, où se trouve-t-il et / ou comment actualiser?), mais je suis presque sûr que offline_access n'est pas la bonne façon.

David Pope
la source
1
mêmes doutes ici David. avez-vous trouvé plus d'informations sur la façon de sécuriser les jetons stockés pour un accès hors ligne?
neal aise
Les documents de Facebook sont terribles, mais je pense que la situation est qu'il est raisonnablement sûr de conserver les jetons d'accès NON acquis avec offline_access. S'il est vrai que toute personne qui y a accès (alors que l'utilisateur FB est toujours connecté) peut faire tout ce pour quoi l'utilisateur vous a accordé l'autorisation, ce n'est pas si mal puisque les jetons sont invalides dès que l'utilisateur se déconnecte de Facebook. nulle part. C'est toujours une faille de sécurité (je trouve étrange que vous n'ayez pas à fournir votre secret d'application sur les demandes / me), mais ce n'est pas illimité. Si quelqu'un gémit mieux, n'hésitez pas à me corriger.
David Pope
8

Oui, ils expirent. Il y a une valeur «expires» qui est transmise avec le «access_token», et d'après ce que je peux dire, c'est environ 2 heures. J'ai cherché, mais je ne vois pas de moyen de demander un délai d'expiration plus long.

TerryMatula
la source
3
Si vous demandez l'autorisation "offline_access", le jeton n'expirera pas.
Brendan Berg
1
@Brendan: Mais il sera invalidé dès que l'utilisateur changera son mot de passe Facebook
Hoàng Long
@ HoàngLong une référence à cela?
Charles Prakash Dasari
4

Vous pouvez toujours actualiser le jeton d'accès de l'utilisateur chaque fois que l'utilisateur se connecte à votre site via Facebook. L'accès hors ligne ne peut pas garantir que vous obtenez un jeton d'accès à vie, le jeton d'accès change chaque fois que l'utilisateur révoque votre accès à l'application ou que l'utilisateur change son mot de passe.

Cité de facebook http://developers.facebook.com/docs/authentication/

Remarque: si l'application n'a pas demandé l'autorisation offline_access, le jeton d'accès est limité dans le temps. Le jeton d'accès limité dans le temps est également invalidé lorsque l'utilisateur se déconnecte de Facebook. Si l'application a obtenu l'autorisation offline_access de l'utilisateur, le jeton d'accès n'a pas d'expiration. Cependant, il est invalidé chaque fois que l'utilisateur change son mot de passe.

Supposons que vous stockiez l'uid facebook et le jeton d'accès de l'utilisateur dans une table des utilisateurs de votre base de données, chaque fois que l'utilisateur clique sur le bouton «Se connecter avec Facebook», vous vérifiez l'état de connexion à l'aide de l'API Javascript de Facebook, puis examinez l'état de la connexion à partir de la réponse , si l'utilisateur s'est connecté à votre site, vous pouvez alors mettre à jour le jeton d'accès dans le tableau.

imikay
la source
3

Frappez ceci pour échanger un jeton d'accès vivant court contre un jeton vivant / non expirant (pages):

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
la source
1

connectez-vous à votre compte facebook et modifiez les paramètres de votre application (compte -> paramètre d'application -> autorisation supplémentaire de l'application qui utilise votre compte) décochez la permission (Accéder à mes données lorsque je n'utilise pas l'application (offline_access)). Ensuite, face réservera un nouveau jeton lorsque vous vous connecterez à l'application.

Sreekanth P
la source
1

Le jeton Facebook de base expire environ dans une heure. Mais vous pouvez utiliser un jeton `` échange '' pour obtenir un jeton de longue durée 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} 
Monsieur Tung
la source
0

vérifiez les éléments suivants lorsque vous interagissez avec l'API graphique de Facebook.

1) L'URL de connexion à l'application doit être la base de votre URL de connexion "redirect_uri": - www.x-minds.org/fb/connect/ redirect_uri - www.x-minds.org/fb/connect/redirect 2) Votre "redirect_uri "devrait être le même dans les deux cas (lorsque vous demandez un code de vérification et un access_token) redirect_uri - www.x-minds.org/fb/connect/redirect 3) vous devez encoder l'argument lorsque vous demandez un access_token 4) ne doit pas passer l'argument (type = client_cred) lorsque vous demandez un access_token. le serveur d'autorisation émettra un jeton sans partie de session. nous ne pouvons pas utiliser ce jeton avec l'alias "me" dans l'API graphique. Ce jeton aura une longueur de (40) mais un jeton avec une partie session aura une longueur de (81). Un jeton d'accès sans partie de session fonctionnera dans certains cas

Par exemple: - https://graph.facebook.com/ ? access_token = 116122545078207 | EyWJJYqrdgQgV1bfueck320z7MM. Mais l'API Graph avec l'alias "moi" fonctionnera uniquement avec un jeton avec une partie de session.

Sreekanth P
la source
0

Je ne sais pas exactement quand les jetons expirent, mais ils le font, sinon il n'y aurait pas d'option pour donner des autorisations hors connexion.

Quoi qu'il en soit, il est parfois exagéré de demander à l'utilisateur de donner des autorisations hors connexion. Selon vos besoins, il suffit peut-être que le jeton reste valide tant que le site Web est ouvert dans le navigateur de l'utilisateur. Pour cela, il peut y avoir une solution plus simple - reloger l'utilisateur périodiquement en utilisant un iframe: reconnexion automatique facebook à partir du cookie php

A travaillé pour moi ...

Uri
la source
0

C'est quelques années plus tard, mais l'explorateur d'API Facebook Graph a maintenant un petit symbole d'information à côté du jeton d'accès qui vous permet d'accéder à l'application de l'outil de jeton d'accès et de prolonger le jeton d'API pendant quelques mois. Cela pourrait être utile pendant le développement.

entrez la description de l'image ici

martinedwards
la source