Jak bezpiecznie przekazać identyfikator Facebooka z klienta na serwer

Mam aplikację na płótnie Facebook. Używam JS SDK do uwierzytelniania użytkownika po stronie przeglądarki i żądania różnych informacji za pośrednictwem FB.api (np. Imię i nazwisko, przyjaciele itp.).

Chcę także utrwalić dodatkowe informacje o użytkowniku (nie przechowywane na Facebooku) w bazie danych na moim serwerze, wykonując wywołanie ajax:

{ userFavouriteColour: "Red" }

Aby zapisać to na serwerze i skojarzyć z właściwym użytkownikiem, muszę znać Facebooka, a to stanowi problem. Jak przekazać uid z klienta na serwer.

Opcja 1: Dodaj uid do żądania ajax:

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

To oczywiście nie jest dobre. Byłoby trywialne dla każdego, kto wykonałby żądanie ajax do mojej usługi internetowej, używając identyfikatora Facebooka innej osoby i zmienił ich ulubiony kolor.

Opcja 2: Na serwerze wyodrębnij identyfikator użytkownika z pliku cookie: Czy to możliwe? Przeczytałem, że Facebook ustawia plik cookie zawierający token UID i token dostępu, ale czy mam dostęp do tego pliku cookie w mojej domenie? Co ważniejsze, czy mogębezpiecznie wyodrębnij plik cookie z pliku cookie lub jest otwarty na fałszowanie, podobnie jak opcja 1.

Opcja 3: Uwierzytelnianie po stronie użytkownika na serwerze: Mogłem użyć uwierzytelniania po stronie serwera, aby zweryfikować tożsamość użytkownika na moim serwerze. Ale czy to zadziała, jeśli już używam uwierzytelniania po stronie klienta w przeglądarce? Czy otrzymam dwa różne żetony dostępu? Chciałbym z FB.api żądać z przeglądarki, więc potrzebuję token dostępu na kliencie (nie tylko na serwerze).

To musi być bardzo powszechny scenariusz, więc myślę, że brakuje mi czegoś fundamentalnego. Przeczytałem wiele dokumentacji na Facebooku (różne przepływy uwierzytelniania, tokeny dostępu, żądanie podpisania itd.) I wiele postów na temat SO, ale nadal nie rozumiem, jak ładnie współgrają uwierzytelnianie po stronie klienta i uwierzytelnianie po stronie serwera.

Krótko mówiąc, chcę poznać tożsamość użytkownika na serwerze, ale nadal wysyłać żądania do api Facebooka z przeglądarki klienta?

(Używam ASP.NET i Facebook C # SDK na serwerze)

EDYTOWAĆ: Dodano nagrodę. Miałem nadzieję uzyskać bardziej oficjalną, oficjalną rekomendację dotyczącą tego, jak sobie z tym poradzić, a nawet przykład. Jak już wspomniałem, przeczytałem już wiele oficjalnych dokumentów FB dotyczących przepływów uwierzytelniania, ale wciąż nie mogę znaleźć niczego definitywnego w kwestii współpracy uwierzytelniania po stronie klienta i po stronie serwera.

questionAnswers(4)

yourAnswerToTheQuestion