Могу ли я использовать Android AccountManager для получения токена доступа OAuth для AppEngine?

У меня есть клиент Android для моего сервера AppEngine, используя оба аккаунта Google. Я хотел бы использовать AccountManager для получения доступа к Token для OAuth. Пока я использую ClientLogin, но я хотел бы переключиться на OAuth.

Настройка OAuth на AppEngine проста - я следил за в этой статье. Но клиентская сторона - загадка, в частности я не знаю, что использовать для области, в терминах AccountManager authTokenType. Для ClientLogin я использую "ah" для authTokenType. Но как насчет OAuth?

Ответы

Ответ 1

На сегодняшний день вы можете использовать API сервисов Google Play для Android для аутентификации Oauth 2.0 на Android. Затем вы можете использовать метод, описанный @nivco, чтобы получить userinfo для appengine. Я еще этого не делал, но я планирую сделать то, о чем вы говорите.

https://developers.google.com/android/google-play-services/authentication

Ответ 2

Я не уверен, что вы пытаетесь сделать это через App Engine OAuthService, который используется в статье, о которой вы говорите. Также утверждается, что AppEngine OAuthService поддерживает только OAuth 1, но Android поддерживает только OAuth 2:), поэтому вы ввернуты.

Если вы хотите сделать перекрестный Android-аутентификатор App Engine, я бы сделал следующее:

  • В Android: получить токен доступа для API UserInfo (scope = https://www.googleapis.com/auth/userinfo.email и https://www.googleapis.com/auth/userinfo.profile) из AccountManager.
  • Передайте токен доступа в App Engine в параметре URL запроса, который вы делаете с Android на AppEngine (убедитесь, что используете HTTPS, чтобы избежать перехвата!).
  • На стороне App Engine: используйте токен доступа, чтобы прочитать идентификатор пользователя, используя UserInfo API. Это в основном используется OpenID Connect!
  • Затем вы можете использовать информацию, полученную вами из API UserInfo для аутентификации пользователя. Идентификатор электронной почты и идентификатор пользователя, который вы получите из API UserInfo, эквивалентны идентификатору электронной почты и идентификатора пользователя, который вы получите из AppEngine UserService = > , которому вы можете доверять!

PS: Я описал получение токенов OAuth 2 с помощью AccountManager Android в в этой статье. Это было написано до мороженого сэндвич, но я прыгаю, это все еще действует. В основном authTokenType должен быть oauth2:{scopes}, поэтому, например, oauth2:https://www.googleapis.com/auth/tasks для API задач. Могут быть некоторые более эффективные способы сделать это сейчас.