Ziel: Ermöglichen Sie einem Benutzer die Authentifizierung mit Facebook in einer iOS-Anwendung, für die Zugriff auf einen geschützten Webdienst erforderlich ist, den ich ausführe.
Annahmen: Es gibt ein natives Authentifizierungs- (und Registrierungs-) System für Benutzer, die sich dafür entscheiden, Facebook nicht für die Anmeldung zu verwenden.
Einzelheiten:
- Angenommen, wir möchten einem Benutzer die Möglichkeit bieten, sich bei Facebook anzumelden, ohne ein separates Konto / einen separaten Berechtigungsnachweis für unser System zu erstellen.
- Da wir unseren eigenen nativen Authentifizierungsmechanismus (Benutzername und Kennwort) unterstützen, verfügen wir über eigene Benutzer-IDs und stellen ein Authentifizierungstoken aus, das nach der ersten Überprüfung der Anmeldeinformationen für nachfolgende Interaktionen verwendet wird.
Ich bin überrascht, dass Facebook in seiner Entwicklerdokumentation keine Best Practices dafür hat. In der gesamten vorhandenen Dokumentation wird entweder davon ausgegangen, dass Sie die FB-Authentifizierung in eine Website oder eine eigenständige mobile App ohne Dienst integrieren, für den eine Authentifizierung erforderlich ist.
Hier sind meine ersten Gedanken darüber, wie dies gestaltet werden soll, aber ich möchte überprüfen, ob es korrekt ist.
- Client öffnet das Facebook iOS Login
- Benutzer der Benutzeroberfläche meldet sich mit Facebook-Anmeldeinformationen an und erhält Zugriffstoken
- Die iOS App übergibt das Zugriffstoken an unseren Server
Unser Server kommuniziert mit der FB-Diagramm-API über ein Zugriffstoken, um (a) das Token zu validieren und (b) die FB-Benutzer-ID für dieses Zugriffstoken abzurufen.
Beispiel: Unser Server würde https://graph.facebook.com/me/?access_token=XYZ aufrufen, wodurch Profilinformationen in einem JSON-Objekt zurückgegeben würden
Unter der Annahme, dass es gültig ist, extrahiert unser Server die Benutzer-ID aus dem JSON-Objekt und prüft, ob der Benutzer bereits ein Konto hat. In diesem Fall stellen wir dem Client unser eigenes Authentifizierungsticket zur Verwendung 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 stellen unser Authentifizierungsticket aus.
- Der Client gibt dann das Authentifizierungsticket für nachfolgende Interaktionen zurück, für die eine Authentifizierung erforderlich ist.
Dies scheint mir der richtige Ansatz zu sein, aber ich bin mir nicht sicher, ob mir etwas wahnsinnig Grundlegendes fehlt und ich den falschen (komplizierten) Weg gehe.