Zajmuję się tworzeniem aplikacji na iPhone'a, która opiera się na komunikacji z serwerem i chcę korzystać z mechanizmów uwierzytelniania Facebooka.
Zasadniczo myślę, że powinno to działać tak:
- W mojej aplikacji na iPhone'a użytkownik loguje się do Facebooka, używając swojego adresu e-mail i hasła.
- Użytkownik zezwala na dostęp do swoich danych dla powiązanej aplikacji Facebook.
- Moja aplikacja na iPhone'a otrzymuje token dostępu po pomyślnym zalogowaniu.
- W dalszej komunikacji z moim serwerem aplikacja na iPhone'a powinna korzystać z otrzymanego tokena dostępowego Facebooka (np. W zapytaniach).
- Kiedy mój serwer otrzyma zapytanie z aplikacji na iPhone'a, z tokenem dostępu, powinien zapytać Facebooka, czy ten token jest ważny (i dla kogo), a jeśli tak, serwer powinien założyć, że użytkownik jest uwierzytelniony na Facebooku.
Moje pytanie brzmi: jak serwer powinien zapytać Facebooka, czy podany token dostępu jest ważny? Myślę, że powinienem jakoś sprawdzić, czy token jest ważny dla mojej aplikacji na Facebooku.
Wypróbowałem wiele zapytań z Facebooka do wykresu API, które znalazłem, ale nic nie działało tak, jak się spodziewałem. Czy możesz podać mi jakiś przykład?
iphone
facebook
authentication
Marcin
źródło
źródło
Odpowiedzi:
Oto dwuetapowy proces, którego możesz użyć do sprawdzenia, czy token dostępu użytkownika należy do Twojej aplikacji:
1) Wygeneruj token dostępu do aplikacji
( https://developers.facebook.com/docs/howtos/login/login-as-app/ )
2) Debuguj token dostępu użytkownika
( https://developers.facebook.com/docs/howtos/login/debugging-access-tokens/ )
Gdzie INPUT_TOKEN to token dostępu użytkownika, który chcesz zweryfikować, a ACCESS_TOKEN to token Twojej aplikacji uzyskany w kroku 1.
Punkt końcowy debugowania zasadniczo zrzuca wszystkie informacje o tokenie, więc odpowie w następujący sposób:
Jeśli ten token nie pochodzi z „Twojej aplikacji”, zwróci odpowiedź o błędzie.
źródło
Zakładam, że masz już w ręku token dostępu. W takim przypadku najprostszym sposobem sprawdzenia poprawności tokena dostępu jest wysłanie następującego żądania
Tutaj zamień @accesstoken na posiadany token dostępu. Zburzę adres URL i wyjaśnię każdy.
Wydajemy tutaj żądanie Graph API, które zwróci identyfikator użytkownika Facebooka właściciela tokena dostępu w postaci ciągu JSON. Słowo kluczowe „ja” reprezentuje aktualnie zalogowanego użytkownika lub właściciela tokena dostępu. W przypadku tego żądania token dostępu jest parametrem obowiązkowym.
Jeśli podany token dostępu jest nieprawidłowy lub wygasł, Facebook po prostu zwróci jakiś komunikat o błędzie.
W przypadku prawidłowego tokena dostępu wynik będzie wyglądał tak
źródło
Innym rozwiązaniem byłoby użycie w
https://graph.facebook.com/app/?access_token=[user_access_token]
sposób opisany w sekcji Pobierz identyfikator aplikacji z tokenu dostępu użytkownika (lub zweryfikuj aplikację źródłową dla tokena) .Wygląda na to, że jest to nieudokumentowana funkcja, ale zwraca kod JSON zawierający identyfikator aplikacji, dla której wygenerowano token. Jeśli token nie był przeznaczony dla Twojej aplikacji, zwraca 400.
źródło
W najnowszej wersji facebooka (2.2) możesz to zrobić w następujący sposób:
Przykładowe dane wyjściowe:
źródło
Możesz pobrać Facebook SDK dla PHP z GitHub .
źródło
Jeśli użytkownik przekazał Ci identyfikator UID Facebooka, który twierdzi, że należy do niego i chcesz sprawdzić, czy jest on legalny, jest to funkcja Pythona, która zweryfikuje go z tokenem dostępu (implementacja odpowiedzi Robin Jome):
źródło
To jedyna bezpieczna metoda weryfikacji tokena użytkownika przy użyciu tylko jednego żądania:
Zwróć uwagę, że znak „|” w powyższym adresie URL nie jest używany jako OR, ale jako separator i musi znajdować się po wypełnieniu pozostałych pól.
Odpowiedzią będzie JSON wyglądający tak:
Źródła: https://developers.facebook.com/docs/facebook-login/access-tokens/#apptokens (powyższa metoda jest wymieniona na dole tej sekcji)
źródło
Wraz z tokenem dostępu Facebook wysyła również parametr „expires_in”, który jest wartością przesunięcia. Użyj tego, aby obliczyć, kiedy token dostępu wygaśnie jako NSDate. Następnie, gdy musisz złożyć wniosek, porównaj bieżącą datę z datą wygaśnięcia.
Spróbuj także sprawdzić kody statusu i ciągi odpowiedzi, które Facebook odsyła.
źródło