2012-05-01 14 views
14

Mam klienta Android do mojego serwera AppEngine, zarówno przy użyciu kont Google. Chciałbym użyć AccountManager do uzyskania accessToken dla OAuth. Do tej pory używam ClientLogin, ale chciałbym przejść na OAuth.Czy mogę używać konta AccountManager systemu Android w celu uzyskania tokenu dostępu OAuth dla AppEngine?

Ustawienie OAuth w AppEngine jest łatwe - podążyłem za this article. Ale strona klienta jest tajemnicą, w szczególności nie wiem, co używać dla zakresu, w AccountManager warunkach authTokenType. Dla ClientLogin używam "ah" dla authTokenType. Ale co z OAuth?

+1

Pan spojrzał na "App Engine połączony android projekt" opcję wtyczki Eclipse? Automatycznie generuje potrzebny ci kod. –

+0

Nie używałem go, ale, IIRC, zasięg to cała twoja aplikacja. Tak więc coś w stylu "http://myapp.appspot.com" –

+0

Zajrzałem do "projektu Android połączonego z App Engine" i używa ClientLogin, a nie OAuth. Pełna domena jako zasięg może działać, spróbuję tego. –

Odpowiedz

6

Nie jestem pewien, co próbujesz zrobić za pomocą App Engine OAuthService w artykule, do którego się odwołujesz. Stwierdzono również, że AppEngine OAuthService obsługuje tylko OAuth 1, ale Android obsługuje tylko OAuth 2 :), więc jesteście wkręceni.

Jeśli chcesz zrobić przekrój Android - uwierzytelnianie App Engine, co chciałbym zrobić, to:

  1. W Androidzie: uzyskać token dostępu do API userinfo (zakres = https://www.googleapis.com/auth/userinfo.email i https://www.googleapis.com/auth/userinfo.profile) z AccountManager.
  2. Przekaż token dostępowy do App Engine w paramencie URL żądania wysyłanego z Androida do AppEngine (upewnij się, że używasz HTTPS, aby uniknąć przechwycenia!).
  3. Po stronie App Engine: użyj tokena dostępu, aby odczytać tożsamość użytkownika za pomocą UserInfo API. Jest to zasadniczo za pomocą OpenID Connect!
  4. Następnie można użyć informacji uzyskanych z interfejsu API UserInfo w celu uwierzytelnienia użytkownika. Adres e-mail i identyfikator użytkownika otrzymasz z interfejsu API UserInfo jest równoważny adresowi e-mail i identyfikatorowi użytkownika, który otrzymasz od usługi UserService AppEngine => możesz jej zaufać!

PS: Opisałem coraz OAuth 2 żetony za pomocą Android AccountManager w this article. Napisano przed-lodową kanapkę, ale mam nadzieję, że nadal jest ważna. Zasadniczo authTokenType musi być oauth2:{scopes}, więc na przykład oauth2:https://www.googleapis.com/auth/tasks dla Tasks API. Być może istnieją lepsze sposoby na zrobienie tego teraz.

+1

Dzięki za wskazanie mnie we właściwym kierunku. Jednak nie muszę administrować AppEngine przez API, więc nie sądzę, aby ten zakres działał. Chcę zalogować się do AppEngine na koncie Google jako zwykły użytkownik. –

+0

Problem polega na tym, że token dostępu, który dostajesz z 'AccountManager' będzie ważny tylko dla twojej aplikacji na Androida, więc jeśli twoja strona internetowa spróbuje użyć tego samego tokena, zostanie odrzucona. Nie znalazłem jeszcze sposobu na to i nie mogę uwierzyć, że nikt inny nie ma tego problemu ... – Timmmm

+0

Nie sądzę, że jest to możliwe za pośrednictwem interfejsu API używającego autoryzacji App Engine ... Podano również, że usługa AppEngine obsługuje tylko OAuth 1, ale Android obsługuje tylko OAuth 2 :), więc jesteście wkręceni. – Nivco

Powiązane problemy