2011-01-27 16 views
7

Opracowałem prosty interfejs API, aby umożliwić komunikację między aplikacjami mojego Androida i iPhone'a a moim serwerem. W mojej aplikacji, użytkownicy muszą uwierzytelniać się i robią to przy użyciu poświadczeń login/hasło przy następnym wywołaniu API:Facebook Połącz, aby uwierzytelnić się na osobistym API

http://api.myapp.com/login?user=xxx&pass=pass 

aplikacja odbiera w zamian:

{ "api_token": "xxxx-xxxx-xxxx-xxxx" } 

Więc w zasadzie mogę wymienić moje poświadczenia przeciwko api_token.

Chciałbym dodać wsparcie dla Facebooka. Z powodzeniem skorzystałem z pakietu SDK Facebooka i otrzymałem poprawną access_token.

Jednak trzeba zaimplementować mechanizm wymiany access_token z api_token

Zakładając, że użytkownik ma już podłączone jego konto z Facebook (na swoim panelu użytkownika WWW), co byłoby najlepszym realizacja przystąpić do wymiany ?

Odpowiedz

5

Oto jak w końcu to zrobiłem. Działa bardzo dobrze przez ponad rok, nigdy nie miał problemu. Chodzi o to, aby wymieniać żetony za pomocą następującego wywołania API:

http://api.myapp.com/login/facebook?access_token=<facebook_access_token> 

stronie serwera, należy sprawdzić ważność access_token z prostym

wget -qO- https://graph.facebook.com/me?access_token=<facebook_access_token> 

który wysyła z powrotem do JSON z wszystkich informacji o użytkowniku, w tym identyfikator użytkownika Facebook. Zakładając, że użytkownik podłączył już swoje konto do Facebooka, możesz wyszukać numer user_id i odesłać go pod numer api_token.

+0

Oto scenariusz, że jestem zaniepokojony: App A przejmuje token dostępu fb dla użytkownika z uprawnieniami X. App odwiedza swój URL logowania na 'http://api.myapp.com/login/facebook ? access_token = ... ' Ponieważ masz teraz token dostępu, który uzyskała aplikacja A, masz teraz taki sam dostęp do użytkownika jak on, bez pozwolenia użytkownika, który to zrobił (oni" ve przyznano tylko uprawnienia do aplikacji A). Chociaż widzę, że jest to możliwe do obrony na wiele sposobów, nadal wydaje się, że jest ono błędne i potencjalnie stanowi naruszenie zaufania użytkownika. Co sądzisz? –

+2

Cóż, tak, masz rację, ale o ile mi chodzi, jesteśmy "App A". IMHO, jest to to samo, co użytkownik subskrybujący nasz biuletyn: możemy spammować użytkownika lub sprzedać e-mail do wielu stron trzecich, ale nie jesteśmy, ponieważ jesteśmy odpowiedzialną firmą (z odpowiedzialnością prawną) – EricLarch

Powiązane problemy