RESTful web service using oAuth dla aplikacji mobilnych

Buduję aplikację, która składa się z dwóch głównych części:

Aplikacja internetowa z interfejsem API odpoczynku.Aplikacja mobilna (Android, iPhone).

Aplikacja internetowa ma bazę danych, która przechowuje dane o użytkownikach (takich jak posty, wydarzenia itp.).
Aplikacja mobilna korzysta z api REST aplikacji WWW do uzyskiwania dostępu do tych danych, ale w tym celu potrzebuję pewnego rodzaju uwierzytelnienia (użytkownik musi się uwierzytelnić, aby uzyskać dostęp / zmodyfikować swoje dane).

Wiem, że można to łatwo zrobić w taki sposób, że aplikacja mobilna dostarcza nazwę użytkownika i hasło podczas każdego żądania do interfejsu API, a aplikacja internetowa uwierzytelnia tę nazwę użytkownika i hasło w bazie danych przed wykonaniem żądania.
Chciałbym jednak użyć oAuth (aby użytkownik mógł się zalogować za pomocą Google, Facebooka ...) i to jest miejsce, w którym sprawy się komplikują i nie jestem pewien, jaki jest najlepszy sposób, aby to zrobić.

Mój pierwszy pomysł: aplikacja mobilna wysyła poświadczenia dostawcy OAuth (na przykład Facebook) (nazwa użytkownika i hasło) do aplikacji internetowej, która następnie uwierzytelnia je przeciwko dostawcy oAuth. Wkrótce zdałem sobie sprawę, że nie jest to w porządku, ponieważ oznacza to, że użytkownik musi ufać, że witryna nie nadużywa określonych danych uwierzytelniających, więc tak nie jest.Niedobrze

Mój drugi pomysł: aplikacja mobilna używa aplikacji sieci web api do informowania aplikacji internetowej, że chce się uwierzytelnić przed dostawcą oAuth P. Przekierowanie aplikacji internetowej do dostawcy P, gdzie użytkownik wprowadza swoje poświadczenia. Następnie dostawca P przekierowuje z powrotem do aplikacji internetowej, w której użytkownik jest zalogowany, a JSON o pomyślnym zalogowaniu jest wysyłany do aplikacji mobilnej. Byłoby świetnie, gdyby nie część, w której użytkownik musi ręcznie wprowadzić swoje poświadczenia. Zaimplementowałem to rozwiązanie i problem polega na tym, że po uzyskaniu dostępu do aplikacji mobilnej aplikacja sieciowa api JSON nie jest zwracana natychmiast, ale pierwsze przekierowania są wykonywane i wszystko to psuje. Myślałem o używaniu webView w aplikacji mobilnej, ale nie wiem, jak powrócić z webView, gdy JSON ma zostać wysłany. Nie jestem pewien, czy powinienem kontynuować ten pomysł, czy to jest niewłaściwy sposób?Może dobrze, jeśli jakieś problemy zostały rozwiązane

Mój trzeci pomysł: Aplikacja mobilna uwierzytelnia się bezpośrednio przeciwko dostawcy oAuth P. Jeśli to się powiedzie, aplikacja mobilna wysyła żądania do aplikacji internetowej zawierającej informacje o użytkowniku (na przykład userId lub hasło użytkownika), aby aplikacja internetowa wiedziała, jakim jest użytkownikiem. Oznacza to jednak, że aplikacja internetowa musi ufać aplikacji mobilnej, której dany użytkownik jest naprawdę uwierzytelniony. Oznacza to, że aplikacja internetowa musi mieć pewność, że api jest dostępny z aplikacji mobilnej. Mogę to zrobić, wpisując specjalne hasło (tajne) w aplikacji mobilnej, które jest wysyłane z każdym żądaniem, aby udowodnić, że żądanie zostało wysłane przez aplikację mobilną.
Złą stroną tego podejścia jest to, że muszę zaimplementować uwierzytelnianie aplikacji mobilnej przeciwko dostawcy OAuth dla każdej kombinacji (mobilny system operacyjny, dostawca oAuth). Również nie jestem pewien, jak bezpieczne jest to. Czy uważasz, że jest to dobry sposób na to, co mogę poprawić / zmienić? Mam przeczucie, że czegoś brakuje.To może być dobre, ale wymaga dużo pracy

Proszę mi powiedzieć, jaki pomysł jest najlepszy i czy istnieje sposób na ich ulepszenie, dzięki

questionAnswers(1)

yourAnswerToTheQuestion