Zugriffsschlüssel

Wenn sich jemand über Facebook Login mit einer App verbindet, ruft die App einen Zugriffsschlüssel ab, der vorübergehenden und sicheren Zugriff auf Facebook-APIs gewährt.

Bei einem Zugriffsschlüssel handelt es sich um einen verdeckten String, mit dem ein Nutzer, eine App oder eine Seite identifiziert wird und den die App für Graph API-Aufrufe verwenden kann. Zugriffsschlüssel können auf verschiedene Arten abgerufen werden, die jeweils weiter unten in diesem Dokument behandelt werden. Der Schlüssel enthält Informationen darüber, wann der Schlüssel abläuft und welche App den Schlüssel generiert hat. Aufgrund von Überprüfungen zur Privatsphäre müssen die meisten API-Aufrufe auf Facebook einen Zugriffsschlüssel enthalten. Für die verschiedenen Anwendungsfälle gibt es verschiedene Arten von Zugriffsschlüsseln:

Zugriffsschlüssel-Typ Beschreibung

Nutzer-Zugriffsschlüssel

Der Nutzer-Zugriffsschlüssel wird am häufigsten verwendet. Diese Art des Zugriffsschlüssels wird jedes Mal benötigt, wenn die App eine API aufruft, um die Facebook-Daten einer bestimmten Person in ihrem Namen zu lesen, zu ändern oder zu schreiben. Nutzer-Zugriffsschlüssel werden im Allgemeinen über einen Login-Dialog abgerufen, was deiner App von der jeweiligen Person erlaubt werden muss.

App-Zugriffsschlüssel

Diese Art des Zugriffsschlüssels wird benötigt, um die App-Einstellungen zu ändern und zu lesen. Er kann auch zum Veröffentlichen von Open Graph-Handlungen verwendet werden. Er wird mithilfe eines im Voraus festgelegten Geheimcodes zwischen der App und Facebook generiert und dann bei Aufrufen verwendet, bei denen App-Einstellungen geändert werden. Du erhältst einen App-Zugriffsschlüssel über einen Server-zu-Server-Aufruf.

Seiten-Zugriffsschlüssel

Diese Zugriffsschlüssel ähneln den Nutzer-Zugriffsschlüsseln, gewähren aber Berechtigungen für APIs, die die Daten einer Facebook-Seite lesen, schreiben oder ändern. Um einen Seiten-Zugriffsschlüssel abzurufen, musst du zunächst einen Nutzer-Zugriffsschlüssel abrufen und die manage_pages-Berechtigung anfragen. Sobald du über den Nutzer-Zugriffsschlüssel verfügst, erhältst du über die Graph API den Seiten-Zugriffsschlüssel.

Client Token

Beim Client Token handelt es sich um eine ID, die du in native mobile Binärdateien oder Desktop-Apps einbinden kannst, um deine App zu identifizieren. Das Client Token soll keine geheime ID sein, da es in Apps eingebettet wird. Mit dem Client Token wird auf APIs auf App-Ebene zugegriffen, jedoch nur auf eine sehr begrenzte Teilmenge. Das Client Token befindet sich in deinem App-Dashboard. Da das Client Token selten verwendet wird, soll es in diesem Dokument nicht erläutert werden. Es wird stattdessen in jeder Dokumentation zu APIs behandelt, die das Client Token verwenden.

Erstellen von Zugriffsschlüsseln

Nutzer-Zugriffsschlüssel

App-Zugriffsschlüssel

Seiten-Zugriffsschlüssel


Nutzer-Zugriffsschlüssel

Obwohl Zugriffsschlüssel von jeder Plattform über verschiedene APIs generiert werden, folgen alle Plattformen beim Abrufen eines Nutzerschlüssels einer grundlegenden Strategie:

Die verschiedenen Plattformen nutzen unterschiedliche Methoden, um diesen Vorgang einzuleiten, und verfügen über Funktionen, um Zugriffsschlüssel im Namen des Entwicklers und der Person, die Berechtigungen erteilt, zu verwalten:

JavaScript

Das Facebook-SDK für JavaScript bezieht und speichert Nutzer-Zugriffsschlüssel automatisch in Browser-Cookies. Du kannst den Nutzer-Zugriffsschlüssel abrufen, indem du einen Aufruf von FB.getAuthResponse startest. In der Antwort ist eine accessToken-Eigenschaft enthalten.

Android

Die Facebook-SDKs für Android verwalten Nutzer-Zugriffsschlüssel automatisch über die Klasse com.facebook.AccessToken. Weitere Informationen darüber, wie du einen Nutzer-Zugriffsschlüssel erhalten kannst, erhältst du durch die Implementierung von Facebook Login für Android. Du kannst den Nutzer-Zugriffsschlüssel durch Überprüfen von Session.getCurrentAccessToken abrufen.

iOS

Die Facebook-SDKs für iOS verwalten Nutzer-Zugriffsschlüssel automatisch über die Klasse FBSDKAccessToken. Weitere Informationen darüber, wie du einen Nutzer-Zugriffsschlüssel erhalten kannst, erhältst du durch die Implementierung von Facebook Login für iOS. Du kannst den Nutzer-Zugriffsschlüssel durch Überprüfen von FBSDKAccessToken.currentAccessToken abrufen.

Web (ohne JavaScript)

Wenn du ohne das Facebook-SDK für JavaScript eine Web-App entwickelst, musst du einen Zugriffsschlüssel anhand der in diesem Dokument erläuterten Schritte erstellen.

Codebeispiele

Android

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    FacebookSdk.sdkInitialize(this.getApplicationContext());
    accessToken = AccessToken.getCurrentAccessToken();
}

iOS

- (void)viewDidLoad
{
  [super viewDidLoad];
  NSString *accessToken = [FBSDKAccessToken currentAccessToken];
}

JavaScript (Web)

FB.getLoginStatus(function(response) {
  if (response.status === 'connected') {
    var accessToken = response.authResponse.accessToken;
  } 
} );

Kurzfristige Schlüssel und langfristige Schlüssel

Nutzer-Zugriffsschlüssel nehmen zwei Formen an: kurzlebige und langlebige Schlüssel. Kurzlebige Schlüssel haben normalerweise eine Laufzeit von einer oder zwei Stunden, während langlebige Schlüssel in der Regel über eine Laufzeit von rund 60 Tagen verfügen. Du solltest dich nicht darauf verlassen, dass diese Laufzeiten gleich bleiben – sie können sich ohne Vorankündigung ändern oder frühzeitig ablaufen. Weitere Informationen erhältst du unter Behandlung von Fehlern.

Zugriffsschlüssel, die über eine Web-Anmeldung generiert werden, sind kurzlebige Schlüssel. Du kannst diese aber in langlebige Schlüssel konvertieren, indem du einen serverseitigen API-Aufruf zusammen mit dem App-Geheimcode startest.

Mobile Apps, die das iOS- und das Android-SDK von Facebook verwenden, erhalten standardmäßig langlebige Schlüssel.

Apps mit Standardzugriff auf die Facebook Marketing API erhalten langlebige Schlüssel, die nicht ablaufen. Diese Schlüssel können immer noch aus anderen Gründen ungültig werden, aber sie verlieren nicht nach einer gewissen Zeitspanne ihre Gültigkeit. Dasselbe gilt für Zugriffsschlüssel für Systemnutzer in Business Manager.

Schlüssel sind portierbar

Ein wesentlicher Aspekt zu Zugriffsschlüsseln ist deren Portierbarkeit. Sobald du über einen Zugriffsschlüssel verfügst, kannst du damit Aufrufe von einem mobilen Client, einem Internetbrowser oder deinem Server zu Facebook-Servern tätigen. Wenn ein Schlüssel auf einem Client abgerufen wird, kannst du diesen Schlüssel zu deinem Server senden und ihn für Server-zu-Server-Aufrufe verwenden. Wenn ein Schlüssel über einen Serveraufruf abgerufen wird, kannst du diesen Schlüssel ebenfalls zu einem Client senden und dann die Aufrufe über den Client tätigen.

Du musst Schlüssel zwischen deinem Client und deinem Server abgesichert über HTTPS verschieben, damit die Sicherheit der Nutzeraccounts gewährleistet ist. Hier erhältst du weitere Informationen über das Verschieben von Schlüsseln zwischen deinen Clients und deinem Server sowie die Auswirkungen davon.

App-Zugriffsschlüssel

Mit App-Zugriffsschlüsseln werden im Namen einer App und nicht einer Person Anfragen für Facebook-APIs getätigt. Dabei können die Parameter deiner App geändert, Testnutzer erstellt und verwaltet oder die Statistiken deiner App gelesen werden.

Einschränkungen

Einige Nutzerdaten, die normalerweise für eine App sichtbar sind, die eine Anfrage mit einem Nutzer-Zugriffsschlüssel tätigt, sind nicht immer mit einem App-Zugriffsschlüssel sichtbar. Wenn du Nutzerdaten liest und in deiner App verwendest, solltest du anstelle eines App-Zugriffsschlüssels einen Nutzer-Zugriffsschlüssel verwenden.

App-Zugriffsschlüssel gelten als unsicher, wenn für deine App in den erweiterten Einstellungen deines App-Dashboards die Option Native/Desktop festgelegt ist, weshalb sie mit API-Aufrufen nicht funktionieren. Der Grund hierfür liegt darin, dass bei nativen Apps oder Desktop-Apps der App-Geheimcode irgendwo eingebettet ist (weshalb der unter Verwendung des App-Geheimcodes generierte App-Zugriffsschlüssel nicht sicher ist).

Erstellen eines App-Zugriffsschlüssels

Um einen App-Zugriffsschlüssel zu erstellen, starte einen Graph API-Aufruf:

GET /oauth/access_token
    ?client_id={app-id}
    &client_secret={app-secret}
    &grant_type=client_credentials

Bei diesem Aufruf wird ein App-Zugriffsschlüssel zurückgegeben, der wie oben beschrieben anstelle eines Nutzer-Zugriffsschlüssels verwendet werden kann, um API-Aufrufe zu tätigen. Denke daran, dass App-Zugriffsschlüssel aus Sicherheitsgründen nie als vordefinierter Code in clientseitigen Code aufgenommen werden sollten. Hierbei würde jeder, der deine Webseite lädt oder deine App dekompiliert, vollen Zugriff auf deinen App-Geheimcode erhalten und könnte so deine App ändern. Das bedeutet, dass du App-Zugriffsschlüssel meist nur bei Server-zu-Server-Aufrufen verwendest.

Hinweis: Da dein App-Geheimcode von dieser Anfrage verwendet wird, darf sie nie in clientseitigem Code oder in einer App-Binärdatei getätigt werden, die dekompiliert werden könnte. Dein App-Geheimcode darf nie mit anderen Personen geteilt werden. Aus diesem Grund sollte dieser API-Aufruf nur mit serverseitigem Code durchgeführt werden.

Es gibt eine weitere Methode, Graph API-Aufrufe zu tätigen, für die kein generierter App-Zugriffsschlüssel erforderlich ist. Du kannst deine App-ID und deinen App-Geheimcode einfach als access_token-Parameter weiterleiten, wenn du einen Aufruf tätigst:

https://graph.facebook.com/endpoint?key=value&access_token=app_id|app_secret

Die Entscheidung, ob ein generierter Zugriffsschlüssel oder diese Methode verwendet werden sollte, hängt davon ab, wo du deinen App-Geheimcode verbirgst.

Seiten-Zugriffsschlüssel

Seiten-Zugriffsschlüssel werden bei Graph API-Aufrufen zur Verwaltung von Facebook-Seiten verwendet. Um einen Seiten-Zugriffsschlüssel zu erstellen, muss ein Administrator der Seite eine erweiterte Berechtigung mit der Bezeichnung manage_pages gewähren. Sobald diese Berechtigung erteilt wurde, kannst du den Seiten-Zugriffsschlüssel mit einem Nutzer-Zugriffsschlüssel abrufen. Dieser muss die erforderlichen Berechtigungen und die folgende Graph API-Anfrage enthalten:

GET /me/accounts HTTP/1.1
Host: graph.facebook.com

Dann wird eine Liste mit Seiten zurückgegeben, die die jeweilige Person verwaltet, einige Zusatzinformationen (z. B. die Seitenkategorie und die Berechtigungen, über die der Administrator für die Seite verfügt) sowie der Seiten-Zugriffsschlüssel:

{
  "data": [
    {
      "category": "Product/service",
      "name": "Sample Page",
      "access_token": "{access-token}",
      "id": "1234567890",
      "perms": [
        "ADMINISTER",
        "EDIT_PROFILE",
        "CREATE_CONTENT",
        "MODERATE_CONTENT",
        "CREATE_ADS",
        "BASIC_ADMIN"
      ]
    }, 
}

Mit einem Seiten-Zugriffsschlüssel kannst du API-Aufrufe im Namen der Seite tätigen. Beispielsweise könntest du auf einer Seite ein Status-Update posten (anstatt in der Chronik einer Person) oder Seitenstatistikdaten lesen.

Seiten-Zugriffsschlüssel sind für jede Seite, jeden Administrator und jede App eindeutig.

Seitenadministratoren verfügen über verschiedene Rollen, die wie im obigen Beispiel vom zurückgegebenen perms-Array angezeigt werden. Die Funktionen, die ihnen zur Verfügung stehen, werden anhand der perms-Werte festgelegt, die in „Schlüssel und Rollen“ beschrieben werden.