Authentifizierungsvorgang v0.6

App-Verzeichnis-SDK

Authentifizierungsvorgang (v0.6, veraltet)

Die meisten Apps sollen benutzerspezifische Inhalte und Interaktionsfunktionen bieten. Vor der Implementierung der Authentifizierung ist die App hinsichtlich des Hootsuite Benutzers, der sie verwendet, vollkommen offen. Auf dieser Seite werden die Techniken zur Authentifizierung eines Hootsuite Benutzers bei Ihrer App beschrieben.

Beachten Sie, dass diese Technik KEINE Methode zur Authentifizierung bei externen Dienstleistern darstellt. Sie sind dafür verantwortlich, eine Authentifizierung bei externen Dienstleistern über die jeweils unterstützten Authentifizierungsmethoden einzurichten.

Um herauszufinden, welche Art der Authentifizierung Ihren Bedürfnissen am besten entspricht, beachten Sie die folgenden Eigenschaften:

  • Single Sign-On teilt einem Stream der App mittels einer Benutzeridentifikation mit, welcher Hootsuite Benutzer sie anzeigt. Eine Manipulation dieser Benutzeridentifikation wird anhand eines Hash-Wertes (Sicherheitstoken) vermieden, durch den die Anforderung authentifiziert wird.
  • OAuth erfüllt die gleiche Aufgabe wie Single Sign-On, doch anstatt eine Benutzeridentifikation und einen Hash-Wert zu übergeben, übergibt es eine Sitzungsidentifikation (Sitzungstoken), die zuvor zwischen Hootsuite und der App ausgehandelt wurde. Darüber hinaus muss sich der Benutzer bei der Installation der App bei seinem Konto anmelden, das in Ihrer eigenen Benutzerbasis vorhanden ist, und Sie müssen die Konto-ID des Benutzers speichern (um sie beim Anzeigen von Streams mit dem Sitzungstoken zu vergleichen). Die eingegebene Konto-ID wird so mit der Installation Ihrer App verknüpft.

Daher ist OAuth nützlich, wenn Sie einen Benutzer aus Ihrer eigenen Benutzerbasis mit Ihrer App verbinden möchten. Es erfordert aber die mehrmalige Installation Ihrer App, wenn der Benutzer mehrere Konten damit verbinden möchte. Nennen wir dies eine Pro-App-Eigenschaft.

Sie können es einem Benutzer natürlich auch ermöglichen, sich bei einem anderen Benutzerkonto anzumelden, und es selbst über eine Single-Sign-On-Authentifizierung mit Ihrer App verbinden. Die Verbindung des Benutzerkontos auf diese Weise ist gänzlich Ihnen überlassen. Sie können anbieten, Konten aus Ihrer eigenen Benutzerbasis zu verbinden, oder Authentifizierung bei einem externen Dienstleister implementieren (anhand von unterstützten Authentifizierungsmethoden). Ungeachtet dessen, ob es sich um Ersteres oder Letzteres handelt, nennen wir diese Konten in diesem Dokument der Einfachheit halber Drittanbieterkonten. Beachten Sie Folgendes: Wenn Sie nun ein Drittanbieterkonto auf Pro-App-Weise, ähnlich wie mit der beschriebenen OAuth-Eigenschaft, mit Ihrer App verbinden, führt dies möglicherweise zu Problemen, da ein Benutzer Streams Ihrer App mehrmals hinzufügen kann und Sie nicht in der Lage wären, den aktuellen Authentifizierungsstatus in jedem Stream wiederzugeben, wenn ein Benutzer in einem Stream die (De)Authentifizierung seines Drittanbieterkontos abschließt. Daher empfiehlt es sich im Allgemeinen, ein Drittanbieterkonto mit einem einzelnen Stream zu verknüpfen. Nennen wir dies eine Pro-Stream-Eigenschaft.

Diese Authentifizierung bei einem Drittanbieterkonto des Typs Pro-Stream hat außerdem den Vorteil, dass ein Benutzer gleichzeitig mehrere Konten jeweils im eigenen Stream verbinden kann, ohne Ihre App mehrmals installieren zu müssen.

Einer der URL-Parameter, der an Streams weitergegeben wird, ist die Platzierungsidentifikation (PID) des Streams. Diese ist für jeden von einem Benutzer hinzugefügten Stream eindeutig und bei der Implementierung der Pro-Stream-Authentifizierung eines Drittanbieterkontos nützlich.

Single Sign-On

Benutzerkennung, Zeitangabe und geheimer Schlüssel (salt), die zwischen Hootsuite und dem App-Entwickler ausgetauscht werden, werden über SHA-1 zusammen gehasht und an die App übermittelt. Das Überprüfungs-Hash kann vom App-Entwickler neu berechnet und mit dem eingefügten Hash verglichen werden. Stimmen sie überein, kann der Benutzer, auf den die Kennung verweist, als angemeldet angesehen werden.

Bei Verwendung dieser Methode kann ein Dritter ein Überprüfungs-Hash nur mit dem übermittelten geheimen Schlüssel manipulieren. Diese Methode ist jedoch anfällig für Replay-Angriffe, wenn ein Angreifer unverschlüsselten Netzwerkverkehr abfangen und den Abfragestring sehen kann. Dies lässt sich durch Verwendung von https und durch Prüfung der Aktualität der Zeitangabe abwenden.

Standardmäßig handelt es sich bei der angegebenen Benutzeridentifikation um eine eindeutige Kennung, die mit dem Hootsuite Konto des Benutzers verknüpft ist. Sie können es dem Benutzer auch ermöglichen, eine Kennung (E-Mail-Adresse, Benutzername o.a.) einzugeben, die an die App weitergegeben werden soll. Dies sollten Sie jedoch nur tun, wenn die von Ihrer App angezeigten Daten öffentlichen Charakter haben, da jeder Benutzer die E-Mail-Adresse eines anderen Benutzers eingeben kann.

Beispiel-URL:

https://app.somewhere.com?i=1667985&ts=1310681657&token=231a3fb74139c74c37e9111ceb59ce02a349ef88

Die App würde diese Parameter als solche validieren:

$secret = 'sharedSecretABCD1234'; // defined in App configuration at hootsuite.com/developers $user_id = $_REQUEST['i']; $timestamp = $_REQUEST['ts']; $token = $_REQUEST['token']; if (sha1($user_id . $timestamp . $secret) == $token) { echo "Successful login!"; }

An App-Stream-iFrame übermittelte URL-Parameter:

lang=en timezone=7200 pid=2823 // placement ID, unique for each stream per user uid=1234567 // Hootsuite user ID i=1234567 // user identifier (optionally entered by user upon App installation) ts=1318362023 // timestamp token=123abc... // security token (sha1 hash)

OAuth

Die Einrichtung der OAuth-Authentifizierung erfordert umfangreiche Kenntnisse der OAuth-Architektur, da Sie einen "Service Provider"-Endpunkt gemäß den OAuth-Spezifikationen implementieren müssen (siehe Ablaufdiagramm unten). Der Zeitaufwand ist hier zwar höher als beim Single Sign-On, jedoch bietet diese Art der Authentifizierung mehr Sicherheit und nahtlose Nutzung, da der Benutzer sich bei der Installation bei Ihrer App anmeldet.

Hootsuite verwendet die standardmäßige OAuth-Implementierung mit einem zusätzlichen Schritt, in dem Hootsuite (mithilfe eines OAuth-authentifizierten Fetches) eine Sitzungsidentifikation vom Authentifizierungsendpunkt der App abruft. Sie müssen diesen Authentifizierungsendpunkt zusätzlich zu dem OAuth-"Service Provider" implementieren.

Im Ablaufdiagramm unten ist der Authentifizierungsvorgang dargestellt, beginnend mit dem standardmäßigen OAuth-Vorgang, der bei der Installation der App durch den Benutzer ausgelöst wird, über die Validierung des Zugriffstokens durch den Authentifizierungsendpunkt und mit dem Ergebnis, dass der Benutzer bei der App angemeldet ist.

hsOauth.45b015e3

Authentifizierungsendpunkt

Beim ersten Öffnen eines App-Streams wird kein Sitzungstoken weitergegeben, da bei Hootsuite noch keiner hinterlegt ist. An dieser Stelle sollte die App hsp.startAppTokenAuth() aufrufen, um die Abfrage eines Sitzungstokens aus dem Authentifizierungsendpunkt der App durch Hootsuite auszulösen. Sobald Hootsuite das Token erhalten hat, lädt es den App-Stream erneut und übergibt dabei das Token, welches wiederum durch die App validiert wird. Handelt es sich dabei um dasselbe Token wie das vom Authentifizierungsendpunkt bereitgestellte, kann der Benutzer als authentifiziert betrachtet werden.

Sie können sich diesen Vorgang auch so vorstellen, dass während des Tokenaustauschs OAuth verwendet wird, um einen Benutzer bei Ihrer Site anzumelden. Sie generieren eine Sitzungsidentifikation, wie Sie es auch für andere Anmeldeaktionen eines Benutzers tun würden, übergeben sie aber an Hootsuite, von der sie beim Laden der App mitgesendet wird, um den gerade angemeldeten Benutzer zu identifizieren.

Genauer gesagt:

  • Der Hootsuite Benutzer lädt den App-Stream und die App wird vom Server des App-Anbieters geladen, ohne dass Anmeldeinformationen für die Authentifizierung weitergegeben werden.
  • Die App stellt fest, dass keine Benutzersitzung besteht und keine Anmeldeinformationen für die Authentifizierung weitergegeben wurden, zeigt daraufhin die Nachricht "Logging in" an und führt den hsp.startAppTokenAuth()-Javascript-Aufruf aus, der den Austausch der Sitzungstoken startet.
  • Am Back-End wird eine Anforderung von den Hootsuite Servern an den Authentifizierungsendpunkt der App gestellt, der die OAuth-Token überprüft und eine Sitzungsidentifikation zurückgibt.
  • Der App-iframe wird neu geladen, wobei dieses Mal die Sitzungsidentifikation übergeben wird. Die App validiert die Sitzungsidentifikation und verwendet sie zum Starten der Benutzersitzung.

Hootsuite übergibt das hinterlegte Sitzungstoken jedes Mal, wenn ein App-Stream geladen wird. Der Entwickler der App entscheidet, wie lange ein Sitzungstoken gültig sein soll. Betrachtet Ihre App eine Sitzung als abgelaufen oder anderweitig ungültig, sollte hsp.startAppTokenAuth() erneut aufgerufen werden, um die Erstellung eines neuen Sitzungstokens auszulösen.

Validierung des Zugriffstokens

Der Authentifizierungsendpunkt der App sollte das Zugriffstoken gemäß den OAuth-Spezifikationen validieren und eine JSON-Zeichenfolge mit einem "session_token" zurückgeben:

echo json_encode(array('result'=>'success', 'session_token'=>'abcd1234'));

{"result":"success","session_token":"abcd1234"}

Wenn das Token nicht validiert werden konnte:

{"result":"fail","reason":"Some error message"}

Sind die an den Authentifizierungsendpunkt übergebenen Anmeldeinformationen ungültig, kann die App Hootsuite anweisen, mithilfe des hsp.editAppAuth()-Funktionsaufrufs den "edit app"-Dialog des Benutzers zu öffnen, wodurch der Hootsuite Benutzer neue Anmeldeinformationen eingeben oder den OAuth-Vorgang neu starten kann.

Eine Liste mit Links zu OAuth-Implementierungen in verschiedenen Sprachen (viele davon mit Code, der zur Erstellung eines OAuth-Anbieters genutzt werden kann), finden Sie unter http://oauth.net/code/