Chciałbym zbudować małą aplikację mobilną (Android i iOS) i mały serwer zaplecza z REST Api.Zapewnij bezpieczne uwierzytelnianie Facebooka na moim serwerze
Użytkownicy mojej aplikacji (Android lub iOS) muszą zalogować się na Facebooku. Robię to, używając facebook mobile sdk. Gdy logowanie zakończy się powodzeniem, Facebook sdk zwróci uwierzytelnienieToken, który jest teraz na smartfonie użytkowników.
Pomysł wygląda następująco: Ilekroć moja aplikacja potrzebuje pewnych danych, aplikacja będzie łączyła się z moim serwerem zapleczem (REST) przez HTTPS. Na przykład: aplikacja wykonuje prosty proces HTTP GET i przekazuje pobrany klucz uwierzytelniający Facebook. Mój serwer otrzymuje to uwierzytelnienie facebookToken i używa tego tokena do określenia, czy użytkownik jest uwierzytelniony i pobiera informacje z profilu facebook (imię, nazwisko itp.). Dlatego serwer kontaktuje się również z Facebookiem i generuje spersonalizowaną odpowiedź na żądanie HTTP GET.
Moje pytania są następujące:
- Czy naprawdę wystarczy, aby zdać ten facebookAuthentication tokena dla każdego REST API wezwanie, aby serwer odzyskać prawidłową powiązanych Facebook User?
- Używam HTTPS, więc domyślam się, że połączenie jest wystarczająco zaszyfrowane, prawda?
- Chyba potrzebuję jakiegoś mechanizmu podpisu, więc podpisz każde wywołanie REST API (przez HTTPS), aby upewnić się, że token facebookAuthentication został wysłany tylko z mojej aplikacji mobilnej. Zrobiłbym to, używając RSA z SHA-1 do podpisania każdego wywołania REST API. Ale problem z tym podejściem polega na tym, że klient musi przechowywać klucz prywatny gdzieś w aplikacji (do podpisywania żądań), a serwer zna klucz publiczny (w celu dopasowania podpisu). Czy to jest poprawne? Jeśli tak, to uważam, że jest to duży problem z bezpieczeństwem, ponieważ aplikacja mobilna (zwłaszcza Android) może zostać zdekompilowana, aby uzyskać klucz prywatny. Jak bezpiecznie przechowywać ten klucz prywatny w mojej aplikacji? Czy istnieje inny system do podpisania, który możesz polecić?
Bt: Czy znasz dobrą bibliotekę RSA na iOS i Androida?