32 votes

L'API graphique Facebook rejette un jeton d'accès nouvellement créé

Plus tôt dans la journée, le flux de connexion Facebook de notre application web a cessé de fonctionner pour certains utilisateurs. Lorsque nous essayons de récupérer le profil actuel, une erreur est renvoyée. Il prétend que le jeton d'accès que nous venons de générer en redirigeant l'utilisateur vers le flux de connexion OAuth a été rejeté.

La raison invoquée est la suivante :

Le jeton d'accès n'est pas valide car l'utilisateur n'a pas utilisé l'application depuis plus de 90 jours.

Pour moi, cela n'a aucun sens puisque nous ne stocker le jeton d'accès n'importe où, sauf dans la session en cours, et le recréer chaque fois que l'utilisateur se connecte à Facebook.

La trace de la pile de Spring Social pour le GET /me L'appel ressemble à ceci :

ERR c.s.f.v.resource.AuthenticationResource Exception when connecting with Facebook
org.springframework.social.RevokedAuthorizationException: The authorization has been revoked. Reason: The access token is invalid since the user hasn't engaged the app in longer than 90 days.
        at org.springframework.social.facebook.api.impl.FacebookErrorHandler.handleFacebookError(FacebookErrorHandler.java:85)
        at org.springframework.social.facebook.api.impl.FacebookErrorHandler.handleError(FacebookErrorHandler.java:59)
        at org.springframework.web.client.ResponseErrorHandler.handleError(ResponseErrorHandler.java:63)
        at org.springframework.web.client.RestTemplate.handleResponse(RestTemplate.java:775)
        at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:728)
        at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:702)
        at org.springframework.web.client.RestTemplate.getForObject(RestTemplate.java:350)
        at org.springframework.social.facebook.api.impl.FacebookTemplate.fetchObject(FacebookTemplate.java:220)
        at org.springframework.social.facebook.api.impl.FacebookTemplate.fetchObject(FacebookTemplate.java:215)

Le problème est probablement lié à changements dans l'API de Facebook mais je ne vois pas comment cela affecte les jetons d'accès de courte durée que nous créons à chaque connexion.

11voto

Sam Critchley Points 66

J'ai rencontré ce problème lorsque nos tests d'intégration se sont connectés avec un utilisateur de test - le JSON suivant est revenu de l'API graphique :

{
    "error": {
        "message": "The access token is invalid since the user hasn't engaged the app in longer than 90 days.",
        "type": "OAuthException",
        "code": 190,
        "error_subcode": 493,
        "fbtrace_id": "F/1z2AsTRx8"
    },
    "timestamp_microsecond": "2018-05-30 11:22:01.353949"
}

C'était un problème plus important, car les utilisateurs de nos tests ne s'engagent pas dans l'application en tant que telle. Pour résoudre ce problème, j'ai dû :

  • Connectez-vous au site de développement de FB
  • Trouvez l'application en question
  • Regardez sous Roles -> Test Users pour trouver le bon utilisateur.
  • Cliquez sur le bouton "Editer" de l'utilisateur, puis cliquez sur "Se connecter en tant qu'utilisateur de test".
  • Après m'être connecté, je suis allé dans Paramètres -> Apps & Websites.
  • Trouver l'application dans l'onglet "expiré" pour les applications avec lesquelles l'utilisateur n'a pas interagi depuis plus de 90 jours.
  • Cliquez sur le bouton "Afficher et modifier" de l'application expirée.
  • Cliquez sur "Renouveler l'accès" dans la fenêtre popup

Une fois que j'ai effectué toutes ces étapes, mon utilisateur de test (et les tests d'intégration) ont à nouveau fonctionné.

7voto

jmcastanos Points 126

Réponses facebook :

Merci de nous avoir contactés. Il s'agit en fait d'un problème connu que nous que nous suivons déjà dans un autre rapport de bogue.

Je vais fusionner votre rapport avec le précédent, afin que nous puissions traiter le problème à un seul endroit. Veuillez vous référer à ce fil de discussion pour les mises à jour : http://developers.facebook.com/bugs/194772814474841/

Ma solution temporelle était d'utiliser le SDK JS, il fonctionne correctement dans mon cas...

6voto

Thomas Points 1741

Mise à jour :

Le problème semble avoir été corrigé par Facebook.


I a déposé un bogue avec Facebook et ils travaillent actuellement (5/3/18) à une résolution.

Plusieurs solutions de contournement sont proposées ici et dans les commentaires sur le bogue. Pour résumer :

  1. Ajouter une nouvelle autorisation que vous n'avez pas demandée auparavant pour forcer la ré-autorisation
  2. Détecter l'erreur et ré-autoriser l'utilisateur manuellement par l'intermédiaire de auth_type=reauthorize
  3. Passer à JS SDK et utiliser le login côté client

J'opte pour la solution n° 2, car elle semble être la plus simple à mettre en œuvre.

2voto

spi7fire Points 118

J'ai trouvé ce lien dans FB docs : Rafraîchir les jetons d'accès des utilisateurs

Il est mentionné qu'après 90 jours, les utilisateurs doivent rétablir leur jeton, donc en cas d'erreur de ce type, nous devrions simplement rediriger l'utilisateur pour qu'il s'enregistre à nouveau.

Ils mentionnent même qu'ils suppriment les jetons des utilisateurs non actifs en haut de ce document. Peut-être ont-ils fait une erreur et supprimé les jetons de tous les utilisateurs. FB Announcement Quoi qu'il en soit, la solution consiste à rediriger les utilisateurs vers une nouvelle inscription.

1voto

Gaston Perez Points 11

Le bug persiste selon discussion

Selon le commentaire d'un utilisateur de la discussion mentionnée, nous avons révoqué les permissions de chaque utilisateur de notre application et cela a fonctionné. Pour cela, nous avons utilisé l'api next graph point de terminaison . Nous devions faire persister les facebookIDs des utilisateurs.

Salutations

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