So übergeben Sie die Facebook-ID sicher vom Client an den Server

Ich habe eine Facebook Canvas App. Ich benutze das JS SDK, um den Benutzer auf der Browserseite zu authentifizieren und verschiedene Informationen über FB.api anzufordern (z. B. Name, Freunde usw.).

Ich möchte auch einige zusätzliche Benutzerinformationen (die nicht auf Facebook gespeichert sind) in der Datenbank auf meinem Server speichern, indem ich einen Ajax-Anruf tätige:

{ userFavouriteColour: "Red" }

Um dies auf dem Server zu speichern und dem richtigen Benutzer zuzuordnen, muss ich die Facebook-UID kennen und dies ist ein Problem. Wie gebe ich die UID vom Client an den Server weiter?

Option 1: Fügen Sie der Ajax-Anfrage eine UID hinzu:

{ uid: "1234567890",
  userFavouriteColour: "Red" }

Das ist offensichtlich nicht gut. Es wäre für jeden trivial, über die Facebook-ID eines anderen eine Ajax-Anfrage an meinen Webdienst zu richten und dessen Lieblingsfarbe zu ändern.

Option 2: Extrahieren Sie auf dem Server die UID aus einem Cookie: Ist das überhaupt möglich? Ich habe gelesen, dass Facebook ein Cookie setzt, das die UID und das Zugriffstoken enthält, aber kann ich auf dieses Cookie in meiner Domain zugreifen? Noch wichtiger ist, kann ichsicher extrahieren Sie die UID aus dem Cookie oder ist dies wie Option 1 für Spoofing offen?

Option 3: Serverseitige Benutzerauthentifizierung auf dem Server: Ich könnte die serverseitige Authentifizierung verwenden, um die Benutzeridentität auf meinem Server zu überprüfen. Funktioniert dies jedoch, wenn ich bereits die clientseitige Authentifizierung im Browser verwende? Habe ich am Ende zwei verschiedene Zugriffstoken? Ich möchte FB.api-Anfragen vom Browser stellen, damit ich das Zugriffstoken auf dem Client (nicht nur auf dem Server) benötige.

Dies muss ein sehr verbreitetes Szenario sein, daher vermisse ich etwas Grundlegendes. Ich habe viel in der Facebook-Dokumentation (verschiedene Authentifizierungsabläufe, Zugriffstoken, signed_request usw.) und in vielen Posts zu SO gelesen, verstehe aber immer noch nicht, wie clientseitige Authentifizierung und serverseitige Authentifizierung gut zusammenspielen.

Kurz gesagt, ich möchte die Identität des Benutzers auf dem Server kennen und dennoch vom Client-Browser aus Anfragen an die Facebook-API stellen.

(Ich verwende ASP.NET und das Facebook C # SDK auf dem Server.)

BEARBEITEN: Kopfgeld hinzugefügt. Ich hatte gehofft, eine deifnitivere offizielle Empfehlung zu bekommen, wie man mit dieser Situation umgeht, oder sogar ein Beispiel. Wie gesagt, ich habe bereits viele offizielle FB-Dokumente zu Authentifizierungsabläufen gelesen, kann aber immer noch keine endgültigen Aussagen darüber treffen, wie die clientseitige und die serverseitige Authentifizierung zusammenarbeiten.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage