Permanenter Zugriff für die Facebook-App

Unlängst standen wir vor einem Problem im Umgang mit den Berechtigungen die uns Facebook-User erteilen und der Möglichkeit, diese Berechtigungen auch mit unserer App zu benutzen wenn der User offline ist.
Eigentlich sollte es reichen über die API vom User eine “read_stream” permission einzuholen, jedoch wurde uns danach trotzdem der Zugriff auf die betroffenen Daten des Users verwehrt.

App-Authentifizierung unzureichend

Basis war folgender Code:

1
https://graph.facebook.com/oauth/authorize?client_id={fb-app-id}&redirect_uri=http://www.example.com/callbackurl/&scope=read_stream

Leider stellte sich heraus das wir mit unserer App-Authentifizierung trotzdem nicht auf die Daten des Users zugreifen konnten.

1
https://graph.facebook.com/oauth/access_token?type=client_cred&client_id={fb-app-id}&client_secret={fb-app-secretkey}

Standard User-Authentifizierung mit zu kurzer Haltbarkeit

Es stellte sich heraus, das die persönlichen Daten trotz Freigabe für unsere Facebook-App nur mit der persönlichen Userauthetifizierung möglich war, jedoch ist diese standardmäßig leider meist nur rund 1 Stunde gültig. Allerdings kann man diese Gültigkeit mit einer Berechtigungserweiterung Namens “offline_access” verlängern. Danach verändert sich userbezogene Zugriffstoken und er ist länger gültig, wie lange genau geht aus der Facebook API Dokumentation leider nicht hervor.

offline_access bringt die nötige Haltbarkeit

Schlussendlich funktioniert der Offlinezugriff mit folgendem Schnippsel

1) Benutzer wird auf folgenden Link geschickt:

1
https://graph.facebook.com/oauth/authorize?client_id={fb-app-id}&redirect_uri=http://www.example.com/callbackurl/&scope=read_stream,offline_access

Zugriff zum Lesen von Benutzerdaten (read_stream) und Offlinezugriff darauf (offline_access).

2) Der Benutzer wird auf unsere example.com/callbackurl/ zurückgeleitet inkl. der Get-Variable Code

1
$permantenter_accesstoken = file_get_contents("https://graph.facebook.com/oauth/access_token?client_id={fb-app-id}&redirect_uri=http://www.example.com/callbackurl/&client_secret={fb-app-secretkey}&code=".$_GET['code']);

$permanenter_accesstoken kann jetzt dauerhaft gespeichert werden und für Offlineabfragen verwendet werden.

3) Beispiel einer Anfrage

1
$filecontent = json_decode(file_get_contents('https://graph.facebook.com/'.$name.'/feed?'.$permantenter_accesstoken));

$name steht für eine UserID oder einem Usernamen zum Abfragen der Facebook-Wall (feed)

Sobald wir einen genauen Wert haben wie lange der Token für den permanenten Zugriff tatsächlich hält reichen wir diesen hier natürlich nach.

Update:
Aktueller Status: > 20 Tage

Autor: Ing. Karl Kowald»Kontakt

Karl Kowald ist Geschäftsführer der Lorem Ipsum Mediengesellschaft m.b.H. und beschäftigt sich seit 2002 mit Webdevelopment und Optimierung von Besucherströmen. Folgen Sie ihm via RSS oder Twitter.

Kommentare

Kommentare sind geschlossen.