Zugriffsschlüssel

Ein Zugriffsschlüssel ist ein verdeckter String, der einen Nutzer, eine App oder eine Seite identifiziert und von der App für Graph API-Aufrufe verwendet wird. Wenn sich jemand über Facebook Login mit einer App verbindet und die Genehmigungsanforderung annimmt, ruft die App einen Zugriffsschlüssel ab, der vorübergehenden und sicheren Zugriff auf Facebook-APIs gewährt. Zugriffsschlüssel können auf verschiedene Arten abgerufen 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-TypBeschreibung

Nutzer-Zugriffsschlüssel

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 Art Zugriffsschlüssel ähnelt den Nutzer-Zugriffsschlüsseln, gewährt 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 Seitenberechtigung oder die von dir benötigten Berechtigungen anfordern. 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.

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:

Kurzlebige Schlüssel und langlebige 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 die Lebenszeit immer gleich bleibt – sie kann sich ohne Vorwarnung ä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.

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:

Android

Die Facebook-SDKs für Android verwalten Nutzer-Zugriffsschlüssel automatisch über die Klasse com.facebook.AccessToken. Weitere Informationen über die Vorgehensweise zum Erhalt eines Nutzer-Zugriffsschlüssels 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.

Beispielcode

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

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 Zugriffsschlüssel durch Überprüfen von FBSDKAccessToken.currentAccessToken abrufen.

Beispielcode

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

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.

Beispielcode

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

In der Dokumentation zu Facebook Web-SDKs findest du ein vollständiges Code-Beispiel.

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.

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

Zum Erstellen eines App-Zugriffsschlüssels benötigst du Folgendes:

Code-Beispiel

curl -X GET "https://graph.facebook.com/oauth/access_token ?client_id={your-app-id} &client_secret={your-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:

curl -i -X GET "https://graph.facebook.com/{api-endpoint}&access_token={your-app_id}|{your-app_secret}" 

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

Seiten-Zugriffsschlüssel

Seiten-Zugriffsschlüssel werden in Graph API-Aufrufen zur Verwaltung von Facebook-Seiten verwendet. Um einen Seiten-Zugriffsschlüssel zu erstellen, muss ein Administrator der Seite deiner App die Seitenberechtigung oder die erforderlichen Berechtigungen gewähren. Sobald sie gewährt wurden, kannst du den Seiten-Zugriffsschlüssel mit einem Nutzer-Zugriffsschlüssel abrufen, der über die erforderlichen Berechtigungen verfügt.

Code-Beispiel

curl -i -X GET "https://graph.facebook.com/{your-user-id}/accounts?access_token={user-access-token} 

Damit wird eine Liste mit Seiten zurückgegeben, für die du eine Rolle hast, sowie Informationen zu den einzelnen Seiten, wie die Seitenkategorie, die spezifischen Berechtigungen, die du für die einzelnen Seiten hast, und der Seiten-Zugriffsschlüssel.

{
  "data": [
    {
      "access_token": "EAACEdE...",
      "category": "Brand",
      "category_list": [
        {
          "id": "1605186416478696",
          "name": "Brand"
        }
      ],
      "name": "Ash Cat Page",
      "id": "1353269864728879",
      "tasks": [
        "ANALYZE",
        "ADVERTISE",
        "MODERATE",
        "CREATE_CONTENT",
        "MANAGE"
      ]
    },
    {
      "access_token": "EAACEdE...",
      "category": "Pet Groomer",
      "category_list": [
        {
          "id": "163003840417682",
          "name": "Pet Groomer"
        },
        {
          "id": "2632",
          "name": "Pet"
        }
      ],
      "name": "Unofficial: Tigger the Cat",
      "id": "1755847768034402",
      "tasks": [
        "ANALYZE",
        "ADVERTISE",
        "MODERATE",
        "CREATE_CONTENT"
      ]
    }
  ]
}

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.

Client-Zugriffsschlüssel

Eine geringe Anzahl von Graph API-Endpunkten unterstützen Client-Zugriffsschlüssel. Wie App-Token führen auch Client-Token Graph API-Anfragen im Namen von Apps statt Benutzern aus. Sie sollten jedoch nur in solchen Fällen verwendet werden, in denen ein Token in den Code eines mobilen oder Web-Clients eingebettet werden muss und nicht auf einem sicheren Back-End-Server gespeichert wird. Wenn ein Endpunkt zusätzlich zu Client-Tokens eine andere Art von Token unterstützt, solltest du, falls möglich, besser diese andere Art von Token verwenden.

Im Gegensatz zu anderen Zugriffsschlüsseln können Client-Zugriffsschlüssel nicht allein in Anfragen verwendet werden. Sie müssen mit deiner App-ID kombiniert werden. Hänge dazu deinen Zugriffsschlüssel an das Ende deiner App-ID an, getrennt durch einen Senkrechtstrich (|):

{app-id}|{client-token}

Beispiel:

access_token=1234|5678

Um ein Client Token zu erhalten, melde dich bei deinem App-Dashboard an und navigiere zu Einstellungen > Erweitert > Sicherheit > Client Token.

Länge von Zugriffsschlüsseln

Du kannst davon ausgehen, dass sich die Länge aller Zugriffsschlüsseltypen im Laufe der Zeit ändert, da Facebook Änderungen an den darin gespeicherten Daten und ihrer Verschlüsselung vornimmt. Du kannst damit rechnen, dass die Schlüssel im Laufe der Zeit größer und kleiner werden. Verwende daher zum Speichern von Zugriffsschlüsseln einen Datentyp variabler Länge ohne bestimmte maximale Größe.

Mehr dazu