Permanenter Zugriff für die Facebook-App

6. August 2010
by Ing. Karl Kowald

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

About

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