Mam aplikację na płótnie na Facebooku. Używam zestawu SDK JS do uwierzytelniania użytkownika po stronie przeglądarki i żądania różnych informacji za pośrednictwem FB.api (np. Nazwisko, przyjaciele itp.).Jak bezpiecznie przekazać identyfikator Facebooka z klienta na serwer?
Chcę również utrzymują kilka dodatkowych informacji o użytkowniku (nie odbędzie się na Facebook) do bazy danych na moim serwerze poprzez ajax połączenia:
{ userFavouriteColour: "Red" }
aby zapisać to na serwerze i stowarzyszonej z prawidłowym użytkownikiem , Muszę znać Facebookowy uid i to stanowi problem. Jak przekazać numer identyfikacyjny od klienta do serwera.
Opcja 1: Dodaj UID do żądania ajax:
{ uid: "1234567890",
userFavouriteColour: "Red" }
To oczywiście nie jest dobre. Byłoby trywialne, gdyby ktoś złożył prośbę o dodanie do mojego serwisu internetowego za pomocą czyjegoś identyfikatora na Facebooku i zmienił swój ulubiony kolor.
Opcja 2: Na serwerze wyodrębnij identyfikator z pliku cookie: Czy to możliwe? Czytałem, że Facebook ustawia plik cookie zawierający identyfikator UID i dostęp, ale czy mam dostęp do tego pliku cookie w mojej domenie? Co ważniejsze, mogę bezpiecznie wyodrębnić postaci UID cookie lub jest to otwarty na fałszowanie podobnie jak wariant 1.
Wariant 3: po stronie serwera uwierzytelniania użytkownika na serwerze: mogę korzystać z server- uwierzytelnianie po stronie serwera w celu sprawdzenia tożsamości użytkownika na moim serwerze. Ale czy to zadziała, jeśli korzystam już z uwierzytelniania po stronie klienta w przeglądarce? Czy otrzymam dwa różne tokeny dostępu? Chciałbym wysłać żądania FB.api z przeglądarki, więc potrzebuję tokena dostępu na kliencie (nie tylko na serwerze).
To musi być bardzo powszechny scenariusz, więc myślę, że brakuje mi czegoś fundamentalnego. Czytałem wiele dokumentacji na Facebooku (różne przepływy uwierzytelniania, tokeny dostępu, podpisane_request, itp.) I wiele postów na SO, ale nadal nie rozumiem, jak po stronie klienta uwierzytelnianie i uwierzytelnianie po stronie serwera ładnie się razem.
Krótko mówiąc, chcę poznać tożsamość użytkownika na serwerze, ale nadal wysyłam żądania do api Facebooka z przeglądarki klienta?
(używam ASP.NET oraz C# SDK Facebook na serwerze)
EDIT: Dodano Bounty. Miałem nadzieję uzyskać bardziej deifnitive, oficjalne zalecenie, jak poradzić sobie z tą sytuacją, a nawet przykład. Jak już wspomniano, przeczytałem już wiele oficjalnych dokumentów FB na temat przepływów uwierzytelniających, ale nadal nie mogę znaleźć niczego ostatecznego na temat tego, jak działa uwierzytelnianie po stronie klienta i po stronie serwera.
Jeśli przekażę to hasło przez ajax, czy istnieje sposób na wyodrębnienie identyfikatora użytkownika Facebook z tokenu na moim serwerze bez zwracania się do Facebooka? Czy to jest bezpieczne przed podszywaniem się? Nie chcę wysyłać żądania FB api z mojego serwera, więc chcę wyodrębnić identyfikator użytkownika na podstawie informacji przekazanych przez klienta. – njr101
well, FB.getLoginStatus (https://developers.facebook.com/docs/reference/javascript/FB.getLoginStatus/) w Javacriptu zwraca więcej tokena dostępu, ale także identyfikator użytkownika, dzięki czemu możesz wysłać go na serwer side ... – Roni
Dzięki za link - to wyjaśnia, jak zdobyć userId na kliencie. Może nie wyjaśniam się bardzo wyraźnie. Jeśli przekażę ten ID użytkownika na mój serwer, będzie on otwarty na fałszowanie. Jak uzyskać identyfikator użytkownika na serwerze w bezpieczny sposób? – njr101