53 votes

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

Comme je le comprends, c'est le processus de base pour de nouvelles Facebook iframe toile applications en utilisant le OAuth2 API en un mot:

  1. Redirection (ou qui ont de l'utilisateur cliquez sur le lien pour application de l'autorisation URL
  2. L'utilisateur autorise et est redirigé vers l'URL de callback
  3. Rappel utilise le "code" de paramètre pour obtenir un jeton d'accès
  4. Jeton d'accès est utilisé avec l'API Graphique de tirer ou de pousser de l'information

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

Actuellement, je viens de détecter qu'il y a eu une erreur d'essayer d'obtenir des informations de l'utilisateur avec leur jeton d'accès, puis rediriger à l'autorisation d'URL, depuis qu'ils ont déjà autorisé l'application d'une page blanche clignote et qu'ils sont redirigés vers mon application de rappel où je me procurer un nouveau jeton. Il est tellement maladroit, je ne peux pas croire que c'est la bonne méthode.

Remarque: cette question peut être semblable, voire identique, à la façon de l'actualisation d'un jeton oauth lors de l'utilisation de l'Facebook SDK de l'iPhone, mais je ne suis pas à l'aide de SDK iOS pour iPhone, juste une simple application web avec iframe.

41voto

Nathan Totten Points 7774

1) la seule façon de savoir si un cookie est valide est de l'utiliser et de capture de l'erreur s'il est expiré. Il n'existe pas de mode de scrutin ou quoi que ce soit pour vérifier si un jeton est valide.

2) Pour obtenir un nouveau jeton, il suffit de rediriger l'utilisateur vers la page d'authentification de nouveau. Parce qu'ils ont déjà autorisé de votre application il sera instantanément redirigé vers votre application et vous aurez un nouveau jeton. Il ne sera pas invité à autoriser, car ils l'ont déjà fait.

En bref, il n'y a pas des astuces pour cela. Vous êtes déjà à le faire correctement.

26voto

logan Points 1991

Récemment, Facebook a apporté quelques modifications aux jetons d’accès, ce qui leur permet d’être actualisées 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/offline-access-deprecation/

4voto

ashraf mohammed Points 326
//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

4voto

Narendra Singh Points 1

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

2voto

murnax Points 36

si l'utilisateur a déjà autorisé votre application et que le jeton d'accès a expiré. vous pouvez rediriger l'utilisateur vers la page d'authentification à nouveau. mais oauth dialogue 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é.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X