Zugriffsschlüssel für Meta-Technologien

Ein Zugriffsschlüssel ist ein verdeckter String, der eine*n Nutzer*in, eine App oder eine Seite identifiziert und von der App für Graph API-Aufrufe verwendet wird. 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 für Meta-Apps einen Zugriffsschlüssel enthalten. Für die verschiedenen Anwendungsfälle und Abrufmethoden für Zugriffsschlüssel gibt es verschiedene Arten von Zugriffsschlüsseln:

Zugriffsschlüssel-TypBeschreibung

App-Zugriffsschlüssel

Mit einem App-Zugriffsschlüssel können App-Einstellungen geändert und gelesen werden. Er wird mithilfe eines Meta-App-Geheimcodes generiert und anschließend bei Aufrufen verwendet, bei denen App-Einstellungen geändert werden. Du erhältst einen App-Zugriffsschlüssel über einen Server-zu-Server-Aufruf.

Client Token

Ein Client Token wird für den Zugriff auf APIs auf App-Ebene verwendet, die du in deine nativen oder Desktop-Apps einbinden kannst, um deine App zu identifizieren. Das Client Token soll keine geheime ID sein, da es in Apps eingebettet wird. Dein Client Token befindet sich in deinem Meta-App-Dashboard.

Seiten-Zugriffsschlüssel

Ein Seiten-Zugriffsschlüssel wird verwendet, um die Daten einer Facebook-Seite zu lesen, zu schreiben und zu ändern. Um einen Seiten-Zugriffsschlüssel abzurufen, musst du zunächst einen Nutzer-Zugriffsschlüssel abrufen und mit diesem über die Graph API einen Seiten-Zugriffsschlüssel abrufen.

Systemnutzer-Zugriffsschlüssel

Ein Systemnutzer-Zugriffsschlüssel wird verwendet, wenn deine App programmgesteuerte, automatisierte Aktionen für die Anzeigenobjekte oder Seiten deiner Geschäftskund*innen durchführt, ohne auf die Eingabe eines*einer App-Nutzer*in angewiesen zu sein oder eine erneute Authentifizierung zu einem späteren Zeitpunkt zu erfordern.

Nutzer-Zugriffsschlüssel

Wenn deine App in Echtzeit Aktionen ausführt, die auf den Eingaben des*der Nutzer*in basieren, wird ein Nutzer-Zugriffsschlüssel 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. Ein Nutzer-Zugriffsschlüssel wird im Allgemeinen über einen Login-Dialog abgerufen, was deiner App von der jeweiligen Person erlaubt werden muss.

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 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 der meisten Zugriffsschlüssel ist deren Portierbarkeit. Apple gestattet jedoch nicht das Verschieben von Zugriffsschlüsseln in Server. Sobald du aber ü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

Ab Version 13.0 des SDK für iOS und Android, deren Veröffentlichung für Anfang  2022 geplant ist, wird für alle Aufrufe der Graph API ein Client Token benötigt.

Wie App-Zugriffsschlüssel führen Client Token Graph API-Aufrufe im Namen von Apps anstelle von Benutzer*innen durch.

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

So rufst du den Client-Zugriffsschlüssel für eine App ab:

  1. Melde dich in deinem Entwicklerkonto an.
  2. Wähle auf der Seite Apps eine App aus, um das Dashboard für diese App zu öffnen.
  3. Navigiere im Dashboard 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