Ziel: Ermöglichen Sie einem Benutzer die Authentifizierung mit Facebook in eine iOS-Anwendung, die Zugriff auf einen geschützten Webservice erfordert, den ich betreibe.
Annahmen: Es gibt ein natives Authentifizierungs- (und Registrierungs-)System für diejenigen Benutzer, die sich entscheiden, Facebook nicht für die Anmeldung zu verwenden.
Details:
- Annehmen, dass wir dem Benutzer die Möglichkeit bieten möchten, sich mit Facebook anzumelden, ohne ein separates Konto/Anmeldeinformationen für unser System zu erstellen.
- Weil wir unseren eigenen nativen Authentifizierungsmechanismus (Benutzername und Passwort) unterstützen, haben wir unsere eigenen Benutzer-IDs und geben ein Authentifizierungstoken aus, das für nachfolgende Interaktionen nach der anfänglichen Überprüfung der Anmeldeinformationen verwendet wird.
Ich bin überrascht, dass Facebook keine bewährten Verfahren hierfür in ihrer Entwicklerdokumentation hat. Alle vorhandenen Dokumentationen gehen entweder davon aus, dass Sie die FB-Authentifizierung in eine Website integrieren oder eine eigenständige mobile App ohne Dienst erstellen, der eine Authentifizierung erfordert.
Hier sind meine ersten Gedanken dazu, wie dies gestaltet werden könnte, aber ich möchte überprüfen lassen, ob es korrekt ist.
-
Der Client öffnet das Facebook iOS-Login.
-
Der Benutzer meldet sich mit Facebook-Anmeldeinformationen an und erhält Zugriffstoken.
-
Die iOS-App übergibt das Zugriffstoken an unseren Server.
-
Unser Server spricht mit der FB Graph API unter Verwendung des Zugriffstokens, um (a) das Token zu validieren und (b) die FB-Benutzer-ID für dieses Zugriffstoken zu erhalten.
Zum Beispiel würde unser Server https://graph.facebook.com/me/?access_token=XYZ aufrufen, das Profilinformationen in einem JSON-Objekt zurückgeben würde
-
Wenn es gültig ist, extrahiert unser Server die Benutzer-ID aus dem JSON-Objekt und überprüft, ob der Benutzer bereits ein Konto hat. Falls ja, geben wir unserem Client ein eigenes Authentifizierungsticket für diese Sitzung aus. Wenn der Benutzer kein Konto hat, erstellen wir ein neues Konto mit der Facebook-Benutzer-ID, weisen unsere eigene eindeutige Benutzer-ID zu und geben unser Authentifizierungsticket aus.
-
Der Client übergibt dann das Authentifizierungsticket bei nachfolgenden Interaktionen, die eine Authentifizierung erfordern.
Dies scheint mir der richtige Ansatz zu sein, aber ich bin mir nicht sicher, ob ich etwas unglaublich Grundlegendes übersehe und auf dem falschen (komplizierten) Weg bin.
1 Stimmen
Wie wurde das gelöst? Ich überlege, auch den Zugriffstoken weiterzugeben und den Benutzer auf dem Server zu starten. Klingt akademisch, aber ich frage trotzdem.
0 Stimmen
Dies war meine Implementierung mit Rails und Devise: stackoverflow.com/questions/7232490/…
0 Stimmen
Warum nicht den gesamten auth_hash übergeben, anstatt zwei Anrufe an die FB API machen zu müssen (einer vom iOS-Gerät und einmal vom Server aus)?
1 Stimmen
Was passiert, wenn Sie sich von einem anderen Gerät aus anmelden möchten (d. h. Sie haben Ihr Authentifizierungsticket nicht)? Und wenn Sie gerade ein neues Authentifizierungsticket erhalten haben, was hindert jemanden daran, die Facebook-ID/Token abzufangen und es auf seinem eigenen Gerät zu verwenden?
0 Stimmen
Aus Neugier, warum wird in Schritt 5 ein eigenes Authentifizierungsticket ausgestellt? Könnte man nicht stattdessen für jeden nachfolgenden Aufruf an den Server den Facebook-Zugriffstoken verwenden? Mir ist bewusst, dass dies bedeuten würde, dass für jeden App --> Server-Aufruf ein Aufruf vom Server an die Facebook-API erforderlich wäre, anstatt nur für den ersten.