web-dev-qa-db-de.com

Die Facebook Graph-API lehnt neu erstellte Zugriffstoken ab

Früher funktionierte der Facebook-Anmeldefluss unserer Webanwendung für einige Benutzer nicht mehr. Wenn wir versuchen, das aktuelle Profil abzurufen, wird ein Fehler zurückgegeben. Es wird behauptet, dass das Zugriffstoken, das wir soeben durch Weiterleiten des Benutzers an den Anmeldefluss OAuth abgelehnt haben.

Der angegebene Grund ist:

Das Zugriffstoken ist ungültig, da der Benutzer die App seit mehr als 90 Tagen nicht mehr verwendet hat

Für mich macht dies keinen Sinn, da wir den Zugriffstoken nur für die aktuelle Sitzung speichern und ihn jedes Mal neu erstellen, wenn sich der Benutzer bei Facebook anmeldet .

Der Stacktrace von Spring Social für den GET /me call sieht so aus:

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)

Das Problem hängt wahrscheinlich mit Änderungen in der Facebook-API zusammen, aber ich sehe nicht, wie sich dies auf die kurzlebigen Zugriffstoken auswirkt, die wir bei jedem Login erstellen.

32
Thomas

Update :

Das Problem scheint gerade von Facebook behoben worden zu sein.


Ich habe einen Fehler gemeldet mit Facebook und sie arbeiten derzeit (03.05.18) an einer Lösung.

Hier und in den Bug-Kommentaren werden verschiedene Problemumgehungen vorgeschlagen. Zusammenfassen:

  1. Fügen Sie eine neue Berechtigung hinzu, die Sie zuvor nicht angefordert haben, um die erneute Autorisierung zu erzwingen
  2. Beheben Sie den Fehler und autorisieren Sie den Benutzer manuell über auth_type=reauthorize
  3. Wechseln Sie zu JS SDK und verwenden Sie die clientseitige Anmeldung

Ich greife zu Lösung 2, da dies der direkteste Weg zu sein scheint.

6
Thomas

Ich bin auf dieses Problem gestoßen, als unsere Integrationstests mit einem Testbenutzer angemeldet waren - der folgende JSON kam von der Graph-API zurück:

{
    "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"
}

Das war ein größeres Problem, da sich unsere Testbenutzer nicht mit der App als solcher "beschäftigen". Um dies zu beheben, musste ich:

  • Melden Sie sich bei der FB-Entwicklerseite an
  • Finden Sie die betreffende App
  • Suchen Sie unter Rollen -> Benutzer testen nach dem richtigen Benutzer
  • Klicken Sie auf die Schaltfläche Bearbeiten für den Benutzer und dann auf "Als dieser Testbenutzer anmelden".
  • Sobald ich mich angemeldet habe, gehe zu Einstellungen -> Apps & Websites
  • Suchen Sie die App auf der Registerkarte "Abgelaufen" für Apps, mit denen der Benutzer länger als 90 Tage nicht interagiert hat
  • Klicken Sie in der abgelaufenen App auf die Schaltfläche "Anzeigen und bearbeiten"
  • Klicken Sie im Popup auf "Zugriff erneuern"

Nachdem ich alle diese Schritte ausgeführt hatte, funktionierte mein Testbenutzer (und die Integrationstests) wieder.

11
Sam Critchley

facebook-Antworten:

Vielen Dank für Ihre Kontaktaufnahme. Dies ist ein bekanntes Problem, das wir bereits in einem anderen Fehlerbericht nachverfolgen.

Ich werde Ihren Bericht mit dem vorhandenen Bericht zusammenführen, damit wir das Problem an einem Ort behandeln können. Informationen zu Updates finden Sie in diesem Thread: http://developers.facebook.com/bugs/194772814474841/

Meine zeitliche Lösung war die Verwendung von JS SDK, es funktioniert in meinem Fall korrekt ...

7
jmcastanos

Ich habe diesen Link in FB-Dokumenten gefunden: Benutzerzugriffstoken werden aktualisiert

Wobei erwähnt wird, dass Benutzer nach 90 Tagen ihr Token wiederherstellen müssen. Im Falle eines solchen Fehlers sollten wir den Benutzer einfach umleiten, um sich erneut zu registrieren.

Sie erwähnen sogar, dass sie Token von nicht aktiven Benutzern oben in diesem Dokument entfernen. Vielleicht haben sie einen Fehler gemacht und alle Benutzer-Token entfernt. FB Announcement Jedenfalls besteht die Lösung darin, Benutzer zum erneuten Abonnieren umzuleiten.

2
Ofershap

Der Fehler bleibt laut Diskussion bestehen

Gemäß dem Kommentar eines Benutzers zu der erwähnten Diskussion haben wir die Berechtigungen jedes Benutzers unserer App widerrufen und es hat funktioniert. Dafür haben wir next graph api endpoint verwendet. Wir mussten die facebookIDs der Benutzer beibehalten.

Grüße

1
Gaston Perez

TEMPORARY SOLUTION Für iOS müssen Sie den SDK-Code ändern, um "Reauthorize" zu unterstützen. Um den Quellcode zu ändern, müssen Sie ihn mit CocoaPods herunterladen. Kopieren Sie dann die folgenden Funktionen über die Pods: https://github.com/mavris/FacebookFix

0
BlackM