2012-05-24 9 views
10

Ich habe eine laufende Anwendung, die geplante Pinnwand-Posts für einen ihrer Freunde im Auftrag des Benutzers ausführt.Facebook OAuthException: Das Zugriffstoken konnte nicht entschlüsselt werden

Die Anwendung lief einige Zeit gut, aber in letzter Zeit haben einige der Benutzer gemeldet, dass die Nachrichten nicht gepostet wurden.

Die Protokolle zeigen

OAuthException: The access token could not be decrypted. 

Auch wenn der Benutzer die Anwendung erneut besucht und setzt ihre Zugriffstoken die Ausnahme bleibt.

Was könnte die Wurzel des Fehlers und die Möglichkeiten sein, um es zu umgehen?

+0

Funktioniert es noch für irgendwelche Benutzer? Ich weiß, dass letzten Freitag (als Facebook öffentlich wurde) alle Zugriffstoken für alle meine Apps widerrufen wurden. Ich musste alle meine gespeicherten Zugriffstoken löschen und forderte alle meine Benutzer auf, die App erneut zu "autorisieren". Wenn ich versuchte, das Token auszutauschen, ist es fehlgeschlagen. Aber das Wiederholen des Autorisierungsprozesses (der keine wirkliche Aktion erfordert, da die App bereits autorisiert ist, genügt einfach ein Klick auf den Link) gab mir ein neues, gültiges Zugriffstoken. –

+0

Woher wussten Sie, dass alle Zugriffstoken widerrufen wurden? Hast du irgendwelche Ausnahmen bekommen? – rahul1810

+0

Ich benutzte den Access-Token-Debugger und stellte fest, dass jedes einzelne Token, das ich hatte, nicht mehr gültig war. Ich habe nur 2 und 2 von dort zusammen gemacht. Da dies an dem Tag passiert ist, an dem sie an die Öffentlichkeit gingen, hatte ich ungefähr 7 Apps. Alle meine Zugangstoken mit allen 7 Apps waren nicht mehr gültig. –

Antwort

0

In meinem Fall wurde dies durch das accessToken verursacht, das nicht die Benutzer-ID enthielt, als ich eine Anfrage für "mich" machte (was, wie ich annehme, versucht, die Benutzer-ID aus dem Token zu bestimmen).

Token Debugger Antwort:

App ID: 
<ID> : <app> 
User ID: Unknown 
Issued: Unknown 
Expires: 1339171200 (in about an hour) 
Valid: True 
Origin: Web 
Scopes: 

das Problem zu beheben, statt ‚ich‘ anfordern, bat ich um das Profil für die Benutzer-ID, die ich direkt Zugang zu der authResponse hatte.

8

Wenn Sie die folgende Fehlermeldung erhalten, wenn HTTP-Anfragen an die API Facebook machen:

{ 
    "error": { 
     "message": "The access token could not be decrypted", 
     "type": "OAuthException", 
     "code": 190 
    } 
} 

es bedeutet, dass das Zugriffstoken Sie an Facebook senden, wenn Sie die HTTP-Anforderung machen ist NICHT gültig .

Wenn man sich den HTTP-Response-Header Sie ein Feld wie folgt sehen:

WWW-Authenticate:OAuth "Facebook Platform" "invalid_token" "The access token could not be decrypted" 

Ich erhielt den Fehler oben, weil ich einen Zugriffstoken sendete, die 1 Zeichen kürzer war als das, was war der gültige.
Nach dem Vergleich des Access-Tokens mit dem, das ich sendete, entdeckte ich diesen Fehler.

Sie können die Gültigkeit des auf Facebook verwendeten OAuth 2.0-Zugriffstokens (Bearer-Token) mit der Access Token Debugger überprüfen.

+2

Ja, das gleiche hier, nur ein sehr dummer "Copy/Paste" -Fehler. –

+0

Hatte das gleiche Problem. Das Formularfeld für den Token auf Facebook könnte größer sein. –

2

Dies kann, weil Token vor dem Speichern in der Datenbank trimmen. oder Feldgröße ist weniger als Token Chartergröße. Überprüfen Sie einmal in der Tabelle {Variable} nach dem korrekten und vollständigen Token.

3

Facebook-Tokens nehmen an Größe zu und sind nicht mehr auf 255 Zeichen beschränkt, daher kann die Art, wie Sie sie speichern, zu einer Ausnahme führen, wenn Sie eine Variable oder ein Datenbankfeld mit begrenzten Größen verwenden. https://developers.facebook.com/docs/facebook-login/access-tokens

Größen

Erwarten Sie, dass die Größe aller Arten von Zugriffstoken im Laufe der Zeit ändern wird, wie Facebook zu Änderungen macht was:

Dies wird im letzten Abschnitt dieses Facebook doc angegeben ist in ihnen gespeichert und wie sie codiert sind. Sie können erwarten, dass sie im Laufe der Zeit wachsen und schrumpfen werden.Verwenden Sie zum Speichern von Zugriffstoken einen Datentyp mit variabler Länge ohne eine bestimmte maximale Größe.

Für exemple in einer SQL speichern Token Sie die Verwendung von VARCHAR vermeiden kann und

+0

Das hat mein Problem gelöst. Ich habe nur 120 Zeichen in meiner Datenbank gespeichert. +1 –

0

Dieser Fehler stattdessen TEXT oder BLOB verwenden geschieht häufig, wenn Zugriffstoken Länge nicht korrekt ist. Überprüfen Sie das Format des Tokens.

Verwandte Themen