web-dev-qa-db-fra.com

Quelle est la bonne façon d'actualiser le jeton d'accès Facebook OAuth2 après son expiration?

Si je comprends bien, c'est le processus de base pour les nouvelles applications de toile iframe Facebook utilisant l'API OAuth2 en bref:

  1. Rediriger vers (ou demander à l'utilisateur de cliquer sur le lien vers) l'URL d'autorisation de l'application
  2. L'utilisateur autorise et est redirigé vers votre URL de rappel
  3. Le rappel utilise le paramètre "code" pour obtenir un jeton d'accès
  4. Le jeton d'accès est utilisé avec l'API Graph pour extraire ou envoyer des informations

Le problème est que les jetons d'accès expirent relativement rapidement et doivent être "actualisés", donc mes questions sont 1) comment détectez-vous que le jeton a expiré en dehors d'essayer de l'utiliser et d'obtenir simplement une erreur? et 2) quelle est la meilleure pratique pour obtenir un nouveau jeton?

Actuellement, je détecte simplement une erreur en essayant d'obtenir les informations de l'utilisateur avec son jeton d'accès, puis je redirige vers l'URL d'autorisation - car ils ont déjà autorisé l'application, une page vierge clignote et ils sont redirigés vers le rappel de mon application où je reçois un nouveau jeton. C'est tellement maladroit que je ne peux pas croire que c'est la bonne méthode.

53
mtjhax
  1. La seule façon de savoir si un cookie est valide est de l'utiliser et de détecter l'erreur s'il a expiré. Il n'y a pas de méthode d'interrogation ou quoi que ce soit pour vérifier si un jeton est valide.

  2. Pour obtenir un nouveau jeton, redirigez simplement l'utilisateur vers la page d'authentification. Parce qu'ils ont déjà autorisé votre application, ils seront instantanément redirigés vers votre application et vous aurez un nouveau jeton. Ils ne seront pas invités à autoriser car ils l'ont déjà fait.

En bref, il n'y a pas d'astuces à cela. Vous le faites déjà correctement.

41
Nathan Totten

Récemment, Facebook a apporté des modifications aux jetons d'accès qui leur permettent d'être actualisés périodiquement.

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 

Pour plus de détails, consultez ici: https://developers.facebook.com/docs/roadmap/completed-changes/offline-access-removal

26
logan

Facebook a supprimé la fonctionnalité d'actualisation du jeton d'accès au mode "au nom de". Le moyen le plus simple et le plus simple consiste à rediriger l'utilisateur vers la page de connexion Facebook pour réactiver l'application. Trouver doc facbook ici

4
Narendra Singh
//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
4
ashraf mohammed

si l'utilisateur a déjà autorisé votre application et que le jeton d'accès a expiré. vous pouvez à nouveau rediriger l'utilisateur vers la page d'authentification. mais la boîte de dialogue oauth ne s'affiche pas car l'utilisateur a déjà autorisé votre application. il redirigera vers le paramètre redirect_url que vous avez utilisé.

2
murnax