2012-01-21 4 views
14

Tytuł przemawia do większości pytań, ale ciężko jest mi owijać mój mózg, ponieważ mam uwierzytelnionych użytkowników Facebooka, którzy uzyskują dostęp do interfejsu API mojej własnej witryny.W jaki sposób uwierzytelnić się za pomocą interfejsu API mojej własnej strony podczas korzystania z usługi Facebook Connect w celu utworzenia loginu/konta?

Po uwierzytelnieniu użytkownika za pomocą FB, mam trochę informacji o użytkowniku, ale nie ma klucza API ani nazwy użytkownika/hasła, które można przekazać do mojego bezpiecznego serwera API w celu uwierzytelnienia.

Znalazłem kilka podobnych pytań, ale nic, co wydaje się idealnym odpowiedzi:

Każda pomoc będzie bardzo mile widziane!

+1

Kiedy mówisz "własny interfejs API witryn", masz na myśli uwierzytelnianie połączeń między przeglądarką a witryną, czy też masz na myśli własne API, które może być używane przez dowolne osoby, takie jak strony trzecie i urządzenia mobilne? – spotman

+3

@spotman - Dziękuję, że faktycznie jesteś pomocny, a nie tylko jesteś kutasem. Moja witryna wykorzystuje mój własny interfejs API do pobierania treści, a nie połączenia z bazą danych. Uwierzytelniam ich w sieci za pomocą FB Connect, ale szukam najlepszej metody, aby następnie odwrócić się i uwierzytelnić je za pomocą mojego własnego API. Robiłem Basic Auth, ale użytkownicy FB Connect nie mają haseł do uwierzytelnienia. Dzięki jeszcze raz. – gstjohn

Odpowiedz

10

Ponieważ uwierzytelniasz swoich użytkowników przez połączenie z Facebookiem, wiesz wystarczająco dużo o użytkowniku.

Niezależnie od authentication flow używasz, będziesz

KROK 1: otrzymać access_token i parametr expire. Najprawdopodobniej prosiłeś także o user_id (jeśli używasz JS-SDK, poradziłbyś sobie z większością tego).

Krok 2: upakować te info (access_token, expire & user_id) w ciąg hashed, np mimik w formacie Facebook signed_request.

KROK 3: wysłać ten ciąg hashed własnymi API:

https://mydomain.com/apis/getUserSecretData?fb_oauth=my_hashed_string&vars=my_other_vars 

Krok 4: w API punktu końcowego, odszyfrować/dekodowania swój ciąg hashed i weryfikacji expire Jeśli parametr access_token wygasł, musisz zażądać nowego i powtórzyć połączenie API.

+1

Naprawdę to lubię! Dzięki, że jesteś taki pomocny. Jedno pytanie uzupełniające: Czy po kroku nr 4 bezpieczne jest, aby mój punkt końcowy interfejsu API zwrócił klucz API klientowi, który może wykorzystać dla pozostałych żądań, czy powinienem umieścić wszystkie moje żądania w podpisanym zgłoszeniu? – gstjohn

+1

Problem polega na tym, że złośliwy użytkownik dekompiluje twoją aplikację i uzyskuje klucz używany do podpisania żądania, a następnie może użyć dowolnego tokena uwierzytelnienia z dowolnym identyfikatorem użytkownika, ponieważ nie sprawdzasz identyfikatora użytkownika w stosunku do authtoken. Jest to bardziej problematyczne, gdy aplikacja jest aplikacją mobilną, ponieważ łatwo ją dekompilować. W przypadku aplikacji internetowej nie jest to tak ważne, ponieważ klucz szyfrowania będzie bezpiecznie przechowywany na serwerze sieci Web.To pytanie pokazuje, jak sprawdzić poprawność identyfikatora użytkownika w stosunku do authtoken z api http://stackoverflow.com/questions/4817991/facebook-connect-to-authenticate-on-a-personal-api –

Powiązane problemy