Cel: Pozwól użytkownikowi na uwierzytelnienie za pomocą Facebooka w aplikacji na iOS, która wymaga dostępu do chronionej usługi internetowej, którą prowadzę.
Założenia: Istnieje natywny system uwierzytelniania (i rejestracji) dla tych użytkowników, którzy zdecydują się nie używać Facebooka do logowania.
Detale:
- Załóżmy, że chcemy zaoferować opcję zalogowania się przez Facebooka bez tworzenia osobnego konta / poświadczeń dla naszego systemu.
- Ponieważ obsługujemy nasz własny natywny mechanizm uwierzytelniania (nazwa użytkownika i hasło), mamy własne identyfikatory użytkownika i wystawiamy token uwierzytelnienia, który jest używany do kolejnych interakcji po początkowej weryfikacji poświadczeń.
Jestem zaskoczony, że Facebook nie ma najlepszych praktyk w tym zakresie w dokumentacji dla programistów. Cała istniejąca dokumentacja zakłada albo, że budujesz FB na stronie internetowej, albo samodzielną aplikację mobilną bez usługi wymagającej uwierzytelnienia.
Oto moje wstępne przemyślenia na temat tego, jak to zostanie zaprojektowane, ale chcę sprawdzić poprawność pod kątem poprawności.
- Klient wyświetla login Facebook iOS
- Użytkownik interfejsu użytkownika loguje się przy użyciu poświadczeń Facebooka i otrzymuje token dostępu
- Aplikacja iOS przekazuje token dostępu do naszego serwera
Nasz serwer rozmawia z interfejsem API wykresu FB za pomocą tokena dostępu, aby (a) zweryfikować token i (b) uzyskać identyfikator użytkownika FB dla tego tokena dostępu.
np. nasz serwer wywołałby https://graph.facebook.com/me/?access_token=XYZ, co zwróciłoby informacje o profilu w obiekcie JSON
Zakładając, że jest poprawny, nasz serwer wyodrębnia identyfikator użytkownika z obiektu JSON i sprawdza, czy użytkownik ma już konto. Jeśli tak, wydajemy naszemu klientowi własny bilet autoryzacyjny do wykorzystania w tej sesji. Jeśli użytkownik nie ma konta, tworzymy nowe z identyfikatorem użytkownika Facebooka, przypisujemy własny unikalny identyfikator użytkownika i wystawiamy nasz bilet autoryzacji.
- Klient następnie przekazuje bilet uwierzytelniający z powrotem przy kolejnych interakcjach wymagających uwierzytelnienia.
Wydaje mi się to właściwym podejściem, ale nie jestem pewien, czy brakuje mi czegoś niesamowicie podstawowego i podążam niewłaściwą (skomplikowaną) ścieżką.