web-dev-qa-db-fra.com

Facebook Graph API rejette le nouveau jeton d'accès créé

Plus tôt aujourd'hui, le flux de connexion à Facebook de notre application Web a cessé de fonctionner pour certains utilisateurs. Lorsque nous essayons d'extraire le profil actuel, une erreur est renvoyée. Il affirme 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 donnée est:

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

Pour moi, cela n'a aucun sens puisque nous ne le faisons pas stockez le jeton d'accès n'importe où, sauf pour la session en cours, et recréez-le à chaque fois que l'utilisateur se connecte avec Facebook.

Le stacktrace de Spring Social pour le GET /me 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é à modifications de l'API Facebook , mais je ne vois pas en quoi cela affecterait les jetons d'accès de courte durée que nous créons à chaque connexion.

32
Thomas

Mise à jour :

Le problème semble avoir été résolu par Facebook.


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

Plusieurs solutions de contournement sont suggérées ici et dans les commentaires de bogue. Résumer:

  1. Ajouter une nouvelle autorisation que vous n'avez pas demandée auparavant pour forcer une nouvelle autorisation
  2. Attrapez l'erreur et ré-autorisez l'utilisateur manuellement via auth_type=reauthorize
  3. Basculez vers JS SDK et utilisez la connexion côté client

Je vais à la solution n ° 2, car elle semble être la solution la plus simple.

6
Thomas

J'ai rencontré ce problème lorsque nos tests d'intégration ont ouvert une session avec un utilisateur test. Le code JSON suivant est revenu de l'API Graph:

{
    "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 nos utilisateurs de test ne "s'engagent" pas avec l'application en tant que telle. Pour résoudre ce problème, je devais:

  • Connectez-vous au site de développement FB
  • Trouver l'application en question
  • Recherchez sous Rôles -> Testez les utilisateurs pour trouver le bon utilisateur.
  • Cliquez sur le bouton Modifier pour l'utilisateur, puis cliquez sur "Se connecter en tant qu'utilisateur test".
  • Une fois connecté, allez dans Paramètres -> Applications et sites Web
  • Recherchez 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" sur l'application périmée.
  • Cliquez sur "Renouveler l'accès" dans la fenêtre contextuelle.

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

11
Sam Critchley

réponses facebook:

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

Je vais fusionner votre rapport avec le rapport existant afin que nous puissions traiter de la question à un endroit. Veuillez vous référer à ce fil pour les mises à jour: http://developers.facebook.com/bugs/194772814474841/

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

7
jmcastanos

J'ai trouvé ce lien dans la documentation du FB: actualisation des jetons d'accès utilisateur

Ce qui indique qu'après 90 jours, les utilisateurs doivent rétablir leur jeton. Par conséquent, en cas d'erreur, nous devrions simplement rediriger l'utilisateur pour qu'il s'enregistre à nouveau.

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

2
Ofershap

Le bug persiste selon discussion

Selon le commentaire de la discussion mentionnée par un utilisateur, nous avons révoqué les autorisations de chaque utilisateur de notre application et cela a fonctionné. Pour cela, nous avons utilisé le graphique suivant api endpoint . Nous devions conserver les identifiants facebook des utilisateurs.

Cordialement

1
Gaston Perez

SOLUTION TEMPORAIRE Pour iOS, vous devez modifier le code des kits de développement logiciel (SDK) afin de prendre en charge la "réautorisation". Afin de changer le code source, vous devrez le télécharger en utilisant CocoaPods. Ensuite, copiez les fonctions suivantes sur les pods: https://github.com/mavris/FacebookFix

0
BlackM