2011-11-03 12 views
17

Moja aplikacja jest zaprojektowana w następujący sposób: Mam usługę sieciową (działającą na GAE, niezbyt odpowiednią do tego pytania) i dane zawarte w tej usłudze są udostępniane za pośrednictwem strony internetowej oraz aplikacji mobilnych i stacjonarnych.Jak autoryzować aplikacje mobilne u zewnętrznego dostawcy przez Oauth ALE Połącz się z moją usługą, a nie z trzecią stroną:

Obecnie użytkownik uwierzytelnia się na stronie internetowej za pomocą Google ClientLogin, a aplikacje uwierzytelniają/otrzymują upoważnienie za pośrednictwem wbudowanego dostawcy OEA GAE. (OAuth jest tutaj używany głównie do uwierzytelniania, moja aplikacja w rzeczywistości nie wykorzystuje żadnych danych zewnętrznych za pośrednictwem OAuth innych niż unikalny identyfikator i adres e-mail użytkownika).

Co chciałbym zrobić, to zwiększyć liczbę usług których użytkownicy mogą używać do logowania. Ze względu na skomplikowany czynnik aplikacji wydaje mi się, że potrzebuję OAuth. Ale nie mogę właściwie zrozumieć, jak powinien wyglądać ten przepływ.

Pozwala wziąć Facebook jako przykład. Gdy aplikacja mobilna przechodzi przez przepływ Oauth Facebooka i zdobywa token dostępu, to nie wystarczy - ponieważ to moja usługa, a nie aplikacja, która musi porozmawiać z Facebookiem, aby pobrać informacje kontaktowe i unikalny identyfikator użytkownika. Prowadzi mnie to do wniosku, że proces OAuth musi nastąpić w kontekście mojej usługi, a nie aplikacji mobilnej. Moja usługa staje się wtedy konsumentem, a Facebook dostawcą usługi Oauth, a usługa przechowuje token dostępu Oauth, dzieje się tak, gdy użytkownik skonfiguruje konto po raz pierwszy.

Jeśli to jest prawidłowe podejście, gdzie to pozostawia uwierzytelnienie dla aplikacji? Co się dzieje, gdy użytkownik ma już konto i instaluje nowe wystąpienie aplikacji mobilnej? Wyobrażam sobie także przechodzenie przez proces oauth, dopasowywanie danych uwierzytelniających do danych już przechowywanych przez moją usługę, a następnie wydawanie mojego "tokena dostępu" do aplikacji z usługi, aby autoryzować tę instancję aplikacji. Wydaje się zawiłe i hackish.

Jestem pewna, że ​​nie mogę być jedyną osobą, która w rzeczywistości "pożycza" system konta trzeciej strony dla aplikacji mobilnej z zapleczem, ale ja naprawdę nie widzę, jaki jest właściwy sposób zrób to.

Czego nie widzę i/lub nie pojmując koncepcyjnie?

+0

* Świerszcze * Mam wrażenie, że sformułowałem to pytanie niepoprawnie. Jeśli tak, proszę dać mi znać. W przeciwnym razie odpowiem na moje własne pytanie tutaj ... w końcu. – tempy

Odpowiedz

10

Kilkoro kolegów i ja kiedyś zrobiliśmy projekt o podobnym charakterze, z powrotem na uniwersytecie. Uwiarygodniliśmy naszych użytkowników za pośrednictwem Facebooka lub Foursquare, używając ich odpowiednich interfejsów API OAuth.

Natywna wersja aplikacji na Androida otworzyła WebView ze stroną początkową dostawcy OAuth, która przekierowała z powrotem do naszej usługi po uwierzytelnieniu. Następnie nasza usługa wysłała żądanie do tokenu OAuth od dostawcy OAuth (Foursquare ma numer pretty simple instructions). Kiedy dostaliśmy to token, przygotowaliśmy sesję z użyciem plików cookie, z której moglibyśmy uzyskać dostęp z aplikacji.

Aby sprawdzić poprawność sesji, sprawdziliśmy, czy token dostępu był nadal ważny u dostawcy. Do odróżnienia użytkowników wykorzystaliśmy także unikalne identyfikatory użytkowników poszczególnych dostawców.

Tak więc, dla nas działało: Uczyń aplikację uwierzytelniającą & autoryzuj swoją usługę , a nie samą aplikację.

+0

Twoja aplikacja zapisywała te pliki cookie i używała ich do uwierzytelnienia w usłudze, a plik cookie zostałby dopasowany do odpowiedniego tokenu Oauth w usłudze? Czy to coś innego niż tylko generowanie przewodnika i przekazywanie go do aplikacji? – tempy

+0

Dokładnie, aplikacja używała tych przechowywanych plików cookie (zawierających zaszyfrowane identyfikatory itp.), aby uwierzytelnić się w usłudze, która następnie skontaktowałaby się z dostawcami OAuth (aby sprawdzić, czy token był nadal ważny). Można również użyć identyfikatora GUID, ale trzeba utrudnić podszywanie się pod niego, np. mieć coś, o czym tylko serwer wie. – Rich

+1

Na szczęście aplikacja nie zajmuje się szczególnie wrażliwymi danymi w moim przypadku. Ale nadal to podejście ma sens, ale wydaje się też trochę "roll your own" ish. Jest to rozwiązanie, ale zastanawiam się, czy jest to konsensusowe podejście do tego problemu. – tempy

Powiązane problemy